0

我正在尝试创建碰撞算法并在我的 Win32 2D GUI 应用程序中实现他。任务是我得到一个向量来确定 .bmp 图像的中底和四个位于菱形位置的向量。我想让它工作,以便算法知道图像是来自左、右、上还是下。互联网上有很多关于矩形、圆形和距离计算的碰撞检测的教程,但我在将它们应用于菱形时遇到了困难。还有一种叫做轴对齐的边界但我认为它适用于 3d 矢量。当谈到这个话题时,我很弱,所以如果有任何熟练的 C++ 程序员可以指导我阅读一些提到这个话题的好电子书,或者如果代码很小,可以打出来。我尝试在 ABCD 整个菱形上进行 X、Y 坐标的迭代,但失败了。

感谢所有帮助的人。

4

1 回答 1

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) 的哪些符号发生了变化。

于 2012-04-13T16:25:55.437 回答