2

このチュートリアルを使用して、アイソメタイルの座標系に頭を巻き付けようとしています。不必要なクリックを避けるために以下にコピーしている最後のスニペットを除いて、ほとんど理解できています=)

/**
* Intersect two line segments defined by A->B and C->D
*
* Returns the time of intersection along A->B
*/
public function RayIntersect(A : Vector2, B : Vector2, C : Vector2, D : Vector2) : Number
{
    // turn C->D into a plane...
    const n : Vector2 = D.Sub(C).m_Perp;

    // ...and do the regular plane vs ray maths
    const numerator : Number = C.Sub(A).Dot(n);
    const denom : Number = B.Sub(A).Dot(n);

    return numerator / denom;
}

これがどの言語で書かれているのか(Java?ActionScript?)はよくわかりませんが、画面の座標を取得してマップスペースに投影するという考え方です。次の図は、実行されていることの概要を示しています。

ここに画像の説明を入力してください

点が与えられた場合、軸と軸Pに沿った交点を見つけたいと思います。残念ながら、私の行列代数は(非常に)錆びているので、コードで何が行われているのかを推測するのに苦労しています。Pythonの翻訳は、私がこれを理解するのに大いに役立ちます。upright

重要なポイントの1つは、マップを表すために2D numpy配列を使用しているため、行列変換はnumpyを介して処理するのが理想的です。

事前にどうもありがとうございました!

4

1 に答える 1

4
def ray_intersect(A, B, C, D):
   """ 
   Intersect two line segments defined by A->B and C->D
   Returns the time of intersection along A->B
   """

   # turn C->D into a plane...
   E = D-C
   n = np.array((-E[1], E[0]))
   # ...and do the regular plane vs ray maths
   numerator = np.dot(C-A, n)
   denom = np.dot(B-A, n)

   return numerator / denom;
于 2013-02-10T16:30:52.687 に答える