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

重要的一点:我使用 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 回答