このプログラミングゲームを参考に現在制作中です。
代替テキスト http://img12.imageshack.us/img12/2089/shapetransformationf.jpg
Canvas を WPF で変換するには、TranslateTransform
(移動する) とRotateTransform
(回転する) [同じの子 TransformationGroup
]の 2 つのフォームを使用しています。
キャンバスが回転していない場合(または同じになるため、90度回転した場合)、キャンバスの左上のx、y座標を簡単に取得できますが、直面している問題は左上(および他の3点)を取得することです座標。
これは、 aRotateTransform
が適用されても、およびプロパティが変更されないためです (したがって、正方形TranslateTransform
の左上が点線の正方形のようであることを示しています (画像から))。X
Y
キャンバスはその中心から回転しているため、それが原点です。
では、回転後に4点の「新しい」x座標とy座標を取得するにはどうすればよいですか?
[アップデート]
代替テキスト http://img25.imageshack.us/img25/8676/shaperotationaltransfor.jpg
回転の OffsetX と OffsetY を開始 X 座標と Y 座標に追加することで、(新しい画像からわかるように) 回転後の左上の座標を見つける方法を見つけました。
しかし、残りの座標 (他の 3 つ) を把握するのに苦労しています。
この回転した形状で、残りの 3 つの角の x 座標と y 座標をどのように把握できますか?
[編集]
2 番目の画像のポイントは、正確で正確なポイントではありません。私は頭の中で見積もりをしてポイントを作りました。
[更新] 解決策:
まず第一に、プロセス全体の背後にある数学について説明した、非常に有益な長文の投稿をしてくれたJason Sに感謝したいと思います。あなたの投稿を読んで値を試すことで、確かに多くのことを学びました。
しかし、私が望むことを正確に行うコードスニペットを見つけました( EugeneZの言及のおかげですTransformBounds
):
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/