Gra*_*ate 3 .net c# vb.net xna collision-detection
我一直在寻找一种合适的方法来寻找年龄,如果有两个线段(每组两个x,y组合)截取.我见过很多(包括:你如何检测两个线段相交的位置?),但我看到的所有线条都有缺陷.主要是如果线条平行但彼此重叠,它们不会检测到碰撞.
我也不需要返回交叉点,只需一个布尔值即可.
如果有人能指出我正确的方向,我会非常感激,因为我显然是在吮吸几何学.:(
肯定有数学上优雅的方法,但是如果你正在寻找一个使用基本代数的易于理解的算法,试试这个(这不是代码):
我们用它们的端点定义两个线段:
l0 : { (x0, y0), (x1, y1) }
l1 : { (x2, y2), {x3, y3) }
Run Code Online (Sandbox Code Playgroud)
首先,获得每条线的斜率截距形式.您可以查找m,b的公式或自己派生它们:
l0 : m0 * x + b0
l1 : m1 * x + b1
Run Code Online (Sandbox Code Playgroud)
如果(m0 != m1)
线不平行.要找到潜在的交点解决l0 = l1
:
x = (b1 - b0) / (m0 - m1)
y = m0 * x + b0
Run Code Online (Sandbox Code Playgroud)
当且仅当(x, y)
位于两个段上时,段将相交.请注意,只检查x坐标就足够了,因为我们已经(x, y)
在两条线上建立了它:
[编辑反映来自@KenoguLabz的出色输入]
(x0 <= x <= x1) AND (x2 <= x <= x3) AND (y0 <= y <= y1) AND (y2 <= y <= y3)
Run Code Online (Sandbox Code Playgroud)
min(x0, x1) <= x <= max(x0, x1) AND min(x2, x3) <= x <= max(x2, x3)
Run Code Online (Sandbox Code Playgroud)
如果这些线是平行的并且您想知道它们是否重叠,则将一条线的端点替换为上面的x(但是,您只需要针对相反的线进行测试)
希望这可以帮助.祝好运!
归档时间: |
|
查看次数: |
4108 次 |
最近记录: |