this programming gameについては、現在ビルド中です。 (それを回転させる)WPF:回転後の新しい座標の取得
[同じTransformationGroup
の子供] TranslateTransform
は(それを移動する)、およびRotateTransform
:
alt text http://img12.imageshack.us/img12/2089/shapetransformationf.jpg
WPFでキャンバスを翻訳するためには、私は2つのフォームを使用していますキャンバスの左上x、y座標は、回転していないとき(または90degで回転しているときは同じなので)簡単に取得できますが、私が直面している問題は左上(および他の3点)座標。RotateTransform
が印加されると、TranslateTransform
のX
とY
特性が変化(ひいては依然として正方形の左上の点線の正方形(画像から)
それがその起源であるので、キャンバスは、その中心から回転している。
のでどのように私は回転後に「新しい」xと4点のy座標を得ることができますか?
回転からOffsetXとOffsetYを追加することで、私は回転後左上座標を見つけるための方法を発見した[UPDATE]
alt text http://img25.imageshack.us/img25/8676/shaperotationaltransfor.jpg
(あなたが新しいイメージから見ることができるように)開始X座標とY座標に変換します。
しかし、残りの座標(他の3つ)を計算するのに問題があります。
この回転した形状の場合、残りの3つのコーナーのx座標とy座標をどのように把握できますか?
[EDIT]
2画像の点、正確かつEXACT POINTSされません。私は私の頭の中で見積もりでポイントを作った。
[UPDATE]策:すべての
まず、私は彼が全体のプロセスの背後にある数学を記述すること長々と非常に有益なポストのためJason Sに感謝したいと思います。あなたの投稿を読んだり、価値観を試したりすることによって、私は確かに多くのことを学んだ。
しかし、私は今、私が欲しいものを正確に行うコードスニペット(TransformBounds
のEugeneZの言及のおかげで)を発見した:
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));
}
参考:http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/86350f19-6457-470e-bde9-66e8970f7059/
あなたが最も簡単な方法は、 http://stackoverflow.com/a/22511805/2106820 –