Con referencia a this programming game Estoy construyendo.WPF: Conseguir nuevas coordenadas después de una rotación
alt text http://img12.imageshack.us/img12/2089/shapetransformationf.jpg
Para traducir un lienzo en WPF, estoy usando dos formas: TranslateTransform
(para moverlo), y RotateTransform
(rotarlo) [niños de la mismaTransformationGroup
]
puedo conseguir fácilmente los mejores x izquierdo, y coordenadas de una lona cuando no es girado (o gira a 90 grados, ya que será el mismo), pero el problema que estoy enfrentando es conseguir la parte superior izquierda (y los otros 3 puntos) coordenadas
Esto es porque cuando se aplica una RotateTransform
, la TranslateTransform
's X
y Y
propiedades no se cambian (y por lo tanto todavía indican que la parte superior izquierda del cuadrado es igual que el de puntos cuadrados (de la imagen)
el lienzo se gira desde su centro, de modo que sea su origen.
así cómo puedo obtener la "nueva" coordenadas X e y de los 4 puntos después de una rotación?
[ACTUALIZACIÓN]
alt text http://img25.imageshack.us/img25/8676/shaperotationaltransfor.jpg
he encontrado una manera de encontrar el parte superior izquierda coordenadas después de una rotación (como se puede ver en la nueva imagen), añadiendo la OffsetX y OffsetY de la rotación a las coordenadas iniciales X e Y.
Pero ahora estoy teniendo problemas para averiguar el resto de las coordenadas (los otros 3).
Con esta forma de girar, cómo puedo averiguar las coordenadas X e Y de las 3 esquinas restantes?
[editar]
Los puntos en la segunda imagen no son puntos precisión y exactitud. Hice los puntos con estimaciones en mi cabeza.
[ACTUALIZACIÓN] Solución:
En primer lugar, me gustaría dar las gracias a Jason S para ese puesto larga y muy informativo en el que describe las matemáticas detrás de todo el proceso; Ciertamente aprendí mucho leyendo tu publicación y probando los valores.
Pero ahora he encontrado un fragmento de código (gracias a EugeneZ 's mención TransformBounds
) que hace exactamente lo que quiero:
public Rect GetBounds(FrameworkElement of, FrameworkElement from)
{
// Might throw an exception if of and from are not in the same visual tree
GeneralTransform transform = of.TransformToVisual(from);
return transform.TransformBounds(new Rect(0, 0, of.ActualWidth, of.ActualHeight));
}
Referencia: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/86350f19-6457-470e-bde9-66e8970f7059/
Aquí puede encontrar más fácil encontrar el camino http://stackoverflow.com/a/22511805/2106820 –