gpt4 book ai didi

c# - 两条线段在 c# 或 vb.net 中使用 xna 相交吗?

转载 作者:行者123 更新时间:2023-11-30 14:14:03 25 4
gpt4 key购买 nike

我一直在寻找一种合适的方法来确定两条线段(每组 2 组 x,y 坐标)是否截距。我见过很多(包括:How do you detect where two line segments intersect?),但我看到的都有缺陷。主要是如果线平行但彼此重叠,它们不会检测到碰撞。

我也不需要返回交点,只要一个 bool 值就可以了。

如果有人能为我指明正确的方向,我将不胜感激,因为显然我不擅长几何学。 :(

最佳答案

当然有数学上优雅的方法可以做到这一点,但如果您正在寻找一种使用基本代数的易于理解的算法,请试试这个(这不是代码):

让我们通过端点定义两条线段:

l0 : { (x0, y0), (x1, y1) }
l1 : { (x2, y2), {x3, y3) }

首先,获取每条线的斜截式。 m、b的公式可以自己查,也可以自己推导:

l0 : m0 * x + b0
l1 : m1 * x + b1

如果(m0 != m1)线不平行。要找到潜在的交点,请解决 l0 = l1 :

x = (b1 - b0) / (m0 - m1)
y = m0 * x + b0

当且仅当 (x, y) 线段相交位于两个段上。请注意,仅检查 x 坐标就足够了,因为我们已经确定了 (x, y)。在两条线上:

[编辑以反射(reflect)来自@KenoguLabz 的出色输入]

<罢工>

<罢工>
(x0 <= x <= x1) AND (x2 <= x <= x3) AND (y0 <= y <= y1) AND (y2 <= y <= y3)

<罢工>

min(x0, x1) <= x <= max(x0, x1) AND min(x2, x3) <= x <= max(x2, x3)

如果这些线是平行的并且您想知道它们是否重叠,请将上面的 x 替换为一条线的端点(不过您只需要针对相反的线进行测试)

希望这对您有所帮助。祝你好运!

关于c# - 两条线段在 c# 或 vb.net 中使用 xna 相交吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12963661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com