2012-04-13 8 views
0

私は衝突アルゴリズムを作成し、彼を私のWin32 2D GUIアプリケーションで実装しようとしています。 タスクは、私が.bmpイメージの中底の確定した1つのベクトルと菱形の位置にある4つのベクトルを得たことです。私はそれが動作するようにアルゴリズムは、画像が左から、右、上または下から来ているかどうかを知りたいと思った。矩形、円、距離計算の衝突検出についてはインターネット上で多くのチュートリアルがありますが、菱形に適用するのは難しいです。 axis-aligned boundingと呼ばれるものもありますが、私はそれが3dベクトルのためだと思います。私はこの話題になると非常に弱いです。だから、熟練したC++プログラマーが私にこのトピックを言及している良い電子書籍に向けることができれば、あるいはコードが小さいかもしれません。私は、ABCD全体の菱形よりもX、Y座標の反復を試みて、悲惨に失敗しました。ベクトルによる単純な2D衝突検出

ありがとうございました。

+0

2つの質問:1)この宿題はありますか? (それがあれば完璧ですが、[タグ:宿題]にタグを付ける必要があります)、2)これまでに何を試しましたか? – bitmask

+0

軸に沿ったバウンディングボックス(略してAABB)は、3dだけでなく2dでも便利です。アイデアは、複雑なオブジェクトを簡単な形状で囲み、衝突をチェックするのが簡単です。そして、バウンディングボックス*が衝突しなければ、内部の複雑なオブジェクトの詳細をすべて確認する必要はありません。実際のオブジェクトを衝突させるコードを書く必要がありますが、フレームごとに何千回も実行する必要はありません。 – comingstorm

+0

です。宿題としてタグ付けしないと申し訳ありませんが、このサイトは新しいものです。私は長方形と円のための衝突をする方法を知っており、これは以前の宿題のためのものでした。それ以外は、私は完全なピクセルのピクセルをしようとしたが、私はそれが私の現在のコードで実装することがより困難になることに気づいた。 – Marko

答えて

1

私はコンピュータグラフィックスの専門家ではありませんが、一般的に問題は、ドットが凸多角形の中にあるかどうかを判断することです。

このため、次の簡単な手法を使用します。あるベクトルから別のベクトルへの回転方向が正か負かを判断するのに役立つベクトル積と呼ばれる関数があります。だから、点XがポリゴンA_1、A_2、...、A_nによって形成された菱形の内側にあるかどうかのチェックは、すべてのベクトル積(A_iA_ {i + 1}、A_iX)が同じ符号を持つかどうかをチェックすることです。

ベクトル(x1、y1)と(x2、y2)のベクトル積をx1 * y2 - x2 * y1と定義します。

これで、前の位置がポリゴンの外側にあり、現在の位置が内側にある場合は、ドットがポリゴンに当たっているよりも検出されます。どの辺が交差しているかを調べるには、最後の位置更新後にベクトル積(A_iA_ {i + 1}、A_iX)の符号のうちのどれが変化したかを調べるだけです。

+0

すみません。私は何が何(A_iA_ {i + 1}、A_iX)ループであるかを理解しているかどうかはわかりません。 – Marko

+0

@Marko: 'A_iA_ {i + 1}'は 'A_i'から始まって' A_ {i + 1} 'で終わるベクトルで、' A_iX'は 'A_i'から' X'までのベクトルです。次に、これらのベクトルのベクトル積を計算する必要があります。あなたはすべての可能な 'i'のためにこれをやっています。次に、製品のすべての兆候が同じかどうかをチェックします。 – Vlad