可能的重复:
如何检测两条线段相交的位置?
给定两点a
and b
加两个向量v
and u
我想找到第三点c
,它是交点,如下所示:
vector2 intersection(vector2 a, vector2 v, vector2 b, vector2 u)
{
float r, s;
a + r * v = b + s * u;
r * v - s * u = b - a
r * v.x - s * u.x = b.x - a.x
r * v.y - s * u.y = b.y - a.y
}
除了使用高斯消元法之外还有其他方法来求解这个系统吗?或者这是处理这个问题的最佳(或至少是可接受的)方法?
EDIT:
的定义vector2
typedef union vector2
{
float v[2];
struct { float x, y; };
} vector2;
a
and b
也属于类型vector2
,因为点和向量之间的唯一区别在于它通过仿射变换进行变换的方式。
对我来说似乎是一个分配问题。以下是帮助您编写代码的逻辑。
我们将第一条射线称为R0
.
上一点的轨迹R0
定义为P
:
P = P0 + alpha x V0
对于第二条射线R1
:
P = P1 + beta x V1
因为它们应该相交:
P0 + alpha x V0 = P1 + beta x V1
alpha
and beta
是未知数,我们有两个方程x
any y
.
求解未知数并得到交点。
i.e.,
P0.x + alpha * V0.x = P1.x + beta * V1.x
P0.y + alpha * V0.y = P1.y + beta * V1.y
解决alpha
and beta
.
如果两者都有一个真正的正解alpha
and beta
,射线相交。
如果两者都有一个真实但至少有一个负解alpha
and beta
,延长的射线相交。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)