我正在尝试创建碰撞算法并在我的Win32 2D GUI应用程序中实现它。 任务是我有一个矢量确定.bmp图像的中间底部和菱形位置的另外四个矢量。我想让它工作,所以算法知道图像是来自左,右,上还是下。关于矩形,圆形和距离计算的碰撞检测,互联网上有很多教程,但是我很难将它们应用于菱形。还有一些名为axis-aligned bounding但我认为它适用于3d矢量。当涉及到这个主题时,我非常弱,所以如果有任何熟练的C ++程序员可以指导我一些提到这个主题的好电子书,或者如果代码很小,可以输入它。我尝试在ABCD整个菱形上迭代X,Y坐标并且失败了。
感谢所有帮助过的人。
答案 0 :(得分:1)
我不是计算机图形专家,但一般来说,问题归结为确定点是否在凸多边形内。
为此,我将使用以下简单技术。有一个称为矢量积的函数,它有助于确定从一个矢量到另一个矢量的旋转方向是正还是负。因此,检查点X是否在由多边形A_1,A_2,...,A_n形成的菱形内是检查所有矢量积(A_iA_ {i + 1},A_iX)是否具有相同的符号。 / p>
向量(x1,y1)和(x2,y2)的向量乘积定义为x1 * y2 - x2 * y1。
现在,你的检测就是这样:如果前一个位置在多边形之外,并且当前是在内部,那么点已经击中了多边形。为了确定哪一侧被越过,您只需要检查矢量产品的哪个符号(A_iA_ {i + 1},A_iX)自上次更新位置后发生了变化。