如何测试一个点是否位于两条平行线之间?


10

在我设计的游戏中,爆炸会从起点向鼠标方向发射。爆炸的宽度始终是相同的。

沿着屏幕底部(当前是什么)移动的方格应该受玩家控制的爆炸影响。

目前,我正在尝试寻找一种方法来发现这些正方形的角是否在爆炸的两条边界线之内。我认为最好的方法是围绕原点旋转正方形的角,好像爆炸完全处于水平状态,然后查看拐角的Y值是否小于或等于爆炸的宽度。表示它们位于受影响的区域内,但我无法解决


这对我很有帮助:stackoverflow.com/a/3461533/1599699
Andrew

Answers:


11

如果该点在一条直线的一侧与另一条直线的另一侧(如果直线指向同一方向),则该点位于两条平行线之间。

您可以在stackoverflow上使用此问题的最高答案来算出一条线的哪一侧(由2点定义)。


一种替代方法是计算从点到中线的距离,并将其与爆炸宽度的一半进行比较。


2

这就是我的操作方式(另外检查提供的平面是否实际上是平行的。Plane对象包含以下形式的平面方程:Ax + By + Cz + D = 0,可以很容易地从给定的3中生成点,或者从点和法线(如果不确定数学,请参见本页:http : //paulbourke.net/geometry/pointlineplane/

bool isPointBetweenParallelPlanes(const vec3 point, const Plane a, const Plane b){
// test if planes are parallel
vec3 cross = a.normal CROSS b.normal;
assert((a.normal CROSS b.normal) == vec3(0,0,0) && "These planes should be parallel.");
return ((a.normal DOT point) + a.D) * ((b.normal DOT point) + b.D) < 0.0;
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.