C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: 座標変換について


(過去ログ 90 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■53758 / inTopicNo.1)  座標変換について
  
□投稿者/ sacchy (1回)-(2010/09/26(Sun) 17:59:54)

分類:[C#] 

 開発環境:visual studio 2010
 使用言語:C#、silverlight

 座標変換についての質問です。
 初めに、ある長方形の画像を表示させておき、その画像の4つの頂点を保存しておきます。
 次に、その画像の中心により回転させた時、保存しておいた頂点も同時に回転させて値を取得
 するという機能を作りたいのですが、なにか良い方法はないでしょうか。

 画像を回転させるメソッドはありますが、座標をある中心により回転させるというものが見つからない
 ため非常に困っております。


 また、こちらはsilverlightになるのですが、VisualTreeHelperクラスの
 FindElementsInHostCoordinatesメソッドを使うとオブジェクトとの当たり判定が容易にできるらしい
 のですが、サンプルが見つからず使い方が分かりません。よければこちらもご教授ください。

引用返信 編集キー/
■53759 / inTopicNo.2)  Re[1]: 座標変換について
□投稿者/ やじゅ (1747回)-(2010/09/26(Sun) 18:53:37)
やじゅ さんの Web サイト
No53758 (sacchy さん) に返信
>  画像を回転させるメソッドはありますが、座標をある中心により回転させるというものが見つからない
>  ため非常に困っております。

silverlightだとあるのか分からないけど、Matrixオブジェクトが使えないかな。
「アフィン変換」あたりのキーワードで調べてみるとか
http://www.techch.com/wiki/index.php?%EF%BC%A3%EF%BC%83%E9%96%A2%E9%80%A3%2FWindows%20Form%2F%E5%BA%A7%E6%A8%99%E7%B3%BB%E3%81%A8%E5%A4%89%E6%8F%9B

引用返信 編集キー/
■53760 / inTopicNo.3)  Re[1]: 座標変換について
□投稿者/ Hongliang (718回)-(2010/09/26(Sun) 18:54:35)
Silverlight 3 以降って事で良いんですよね?
>  その画像の中心により回転させた時、保存しておいた頂点も同時に回転させて値を取得する
画像の回転をどう記述してるのか分かりませんが、RotateTransform クラスの Transform メソッドや Matrix 構造体の Transform を使えば良いんでは。

>  FindElementsInHostCoordinatesメソッドを使うとオブジェクトとの当たり判定が容易にできるらしい
>  のですが、サンプルが見つからず使い方が分かりません。よければこちらもご教授ください。
別に難しくも無さそうですが、何が分からないのでしょう?
引用返信 編集キー/
■53764 / inTopicNo.4)  Re[2]: 座標変換について
□投稿者/ すなふきぬ (45回)-(2010/09/26(Sun) 22:47:23)
No53759 (やじゅ さん) に返信
> ■No53758 (sacchy さん) に返信
>> 画像を回転させるメソッドはありますが、座標をある中心により回転させるというものが見つからない
>> ため非常に困っております。

Math.PIが使えるならラジアン求めてサインとコサインで算出してみればいいんじゃないでしょうか?
象限の扱いに注意しておけば矩形の当たり判定にも使えると思います。
引用返信 編集キー/
■53769 / inTopicNo.5)  Re[3]: 座標変換について
□投稿者/ sacchy (2回)-(2010/09/27(Mon) 01:37:49)
>>■No53764 (すなふきぬ さん) に返信
>>■No53759 (やじゅ さん) に返信
>>■No53758 (sacchy さん) に返信


 返信ありがとうございます。座標変換の方ですが、ご指摘されました通りMatrix構造体のTransformを用いることでほしい値を
 取得することができました。数日考えていたので、書き込みして良かったと痛感しております。


 FindElementsInHostCoordinatesメソッドの方ですが、こちらについて質問させて頂いたのは回転する短形と複雑な図形とのあた
 り判定ができると思っていたためでした。実際、そのような機能を追加する場合、FindElementsInHostCoordinatesメソッドを
 利用するのは得策なのでしょうか。もしくは他に良い方法はありますでしょうか?
引用返信 編集キー/
■53826 / inTopicNo.6)  Re[4]: 座標変換について
□投稿者/ すなふきぬ (50回)-(2010/09/28(Tue) 01:09:57)
No53769 (sacchy さん) に返信
>  FindElementsInHostCoordinatesメソッドの方ですが、こちらについて質問させて頂いたのは回転する短形と複雑な図形とのあた
>  り判定ができると思っていたためでした。実際、そのような機能を追加する場合、FindElementsInHostCoordinatesメソッドを
>  利用するのは得策なのでしょうか。もしくは他に良い方法はありますでしょうか?

Silverlightは使ったことはないのですが、FindElementsInHostCoordinatesメソッドで指定できるのは、位置(Point)と矩形(Rect)ですよね。
回転を含む矩形の場合はFindElementsInHostCoordinatesのみを使用して判定は難しいと思います。
(判定だけなら、矩形の方を回転させるのではなく、複雑な図形の方を内部で回転させて判定に使用すれば可能だと思いますが、アフィン変換で拡大・縮小も加わる場合は順序を注意しないと判定できないので注意してください。)


複雑な図形が、どの程度の物かわからないので断言はできませんが、領域を数式化できる程度の図形なら演算で当たり判定、数式化が困難・パターンが多い場合は図形同士のマスク処理で判定を行うのが良いかもしれません。
マスク処理は、ビット単位の判定になると思うので判定前に可能な限り領域を特定した方がいいと思います。

またSilverlightのRect構造体は内部値にdoubleを使用していると書いているので、DirectXのようなレイアウトの丸めが発生するなら、大きな倍率で拡大した時とか0.5ピクセル分の誤差が生じる場合もあると思います。

数学は得意ではないので、これ以上のことはあまり言えませんが、参考にしていただければと思います。
引用返信 編集キー/
■53827 / inTopicNo.7)  Re[5]: 座標変換について
□投稿者/ すなふきぬ (51回)-(2010/09/28(Tue) 01:25:06)
No53826 (すなふきぬ さん) に返信
> ■No53769 (sacchy さん) に返信
>> FindElementsInHostCoordinatesメソッドの方ですが、こちらについて質問させて頂いたのは回転する短形と複雑な図形とのあた
>> り判定ができると思っていたためでした。実際、そのような機能を追加する場合、FindElementsInHostCoordinatesメソッドを
>> 利用するのは得策なのでしょうか。もしくは他に良い方法はありますでしょうか?

すいません、自己レスです。

Silverlightなので、回転のみではなく拡大・縮小も考慮すべきですよね。。。
まだざっくりとしか読んでないのですが、ジオメトリのClipを使ってオブジェクトをトリミングする方法があったので、複雑な図形というのがGeometryクラスを継承しているクラスで表現可能ならば、これの流用で判定できるかも。

http://msdn.microsoft.com/ja-jp/library/cc189065(v=VS.95).aspx
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -