En référence à this programming game Je construis actuellement.WPF: Obtenir de nouvelles coordonnées après une rotation
alt text http://img12.imageshack.us/img12/2089/shapetransformationf.jpg
Pour traduire une toile en WPF, j'utilise deux formes: TranslateTransform
(pour le déplacer) et RotateTransform
(pour le faire pivoter) [enfants du mêmeTransformationGroup
]
Je peux facilement obtenir les coordonnées x et y en haut à gauche d'une toile quand elle n'est pas tournée (ou pivotée à 90deg, puisque ce sera la même chose), mais le problème auquel je fais face est le haut gauche (et les 3 autres points) coordonnées.
En effet, lorsqu'un RotateTransform
est appliqué, les propriétés de X
et Y
TranslateTransform
ne sont pas modifiés (et donc indiquent encore que la partie supérieure gauche de la place est comme le carré en pointillé (de l'image)
la toile est en rotation de son centre, de sorte que est son origine.
alors comment puis-je le « nouveau » coordonnées x et y des 4 points après une rotation?
[UPDATE]
alt text http://img25.imageshack.us/img25/8676/shaperotationaltransfor.jpg
Je l'ai trouvé un moyen de trouver le supérieur gauche coordonnées après une rotation (comme vous pouvez le voir dans la nouvelle image) en ajoutant la OffsetX et OffsetY de la rotation aux coordonnées X et Y de départ.
Mais j'ai maintenant du mal à trouver le reste des coordonnées (les 3 autres).
Avec cette forme pivotée, comment puis-je déterminer les coordonnées x et y des 3 coins restants?
[EDIT]
Les points de la 2ème image de NE SONT PAS DES POINTS ET EXACT PRÉCIS. J'ai fait les points avec des estimations dans ma tête.
[UPDATE] Solution:
Tout d'abord, je voudrais remercier Jason S pour ce poste long et très instructif dans lequel il décrit les mathématiques derrière le processus; J'ai certainement beaucoup appris en lisant votre article et en essayant les valeurs.
Mais j'ai trouvé un extrait de code (grâce à la mention de EugeneZ de TransformBounds
) qui fait exactement ce que je veux:
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));
}
Référence: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/86350f19-6457-470e-bde9-66e8970f7059/
Ici vous pouvez trouver plus facile trouver moyen http://stackoverflow.com/a/22511805/2106820 –