Con riferimento a this programming game Attualmente sto costruendo.WPF: ottenere nuove coordinate dopo una rotazione
alt text http://img12.imageshack.us/img12/2089/shapetransformationf.jpg
Per tradurre una tela di canapa in WPF, io sto usando due forme: TranslateTransform
(per spostarlo) e RotateTransform
(per ruotarlo) [figli dello stessoTransformationGroup
]
Posso facilmente ottenere le coordinate x, y in alto a sinistra di una tela quando non è ruotata (o ruotata a 90 gradi, poiché sarà la stessa), ma il problema che sto affrontando è quello in alto a sinistra (e gli altri 3 punti) coordinate.
Questo perché quando una RotateTransform
viene applicata, s' X
e Y
proprietà TranslateTransform
non vengono modificati (e quindi ancora indicano che in alto a sinistra del quadrato è come il tratteggiata-square (dall'immagine)
la tela è in rotazione dal suo centro, in modo che sia la sua origine.
così come posso ottenere il "nuovo" coordinate xey dei 4 punti dopo una rotazione?
[UPDATE]
alt text http://img25.imageshack.us/img25/8676/shaperotationaltransfor.jpg
ho trovato un modo per trovare la in alto a sinistra coordinate dopo una rotazione (come si può vedere dalla nuova immagine) con l'aggiunta del OffsetX e Sfalsamento dalla rotazione alle coordinate iniziali X e Y.
Ma ora sto avendo problemi a capire il resto delle coordinate (gli altri 3).
Con questa forma ruotata, , come è possibile calcolare le coordinate x e y dei restanti 3 angoli?
[EDIT]
I punti nel 2 ° immagine non sono punti accurato e ESATTE. Ho fatto i punti con le stime nella mia testa.
[UPDATE] Soluzione:
Prima di tutto, vorrei ringraziare Jason S per quel post lungo e molto istruttiva in cui descrive la matematica dietro l'intero processo; Ho sicuramente imparato molto leggendo il tuo post e provando i valori.
Ma ora ho trovato un frammento di codice (grazie a EugeneZ s' menzione di TransformBounds
) che fa esattamente quello che voglio:
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));
}
Riferimento: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/86350f19-6457-470e-bde9-66e8970f7059/
Qui potete trovare più facile trovare modo http://stackoverflow.com/a/22511805/2106820 –