可能重复:
如何检测两条线段相交的位置?
给定两个点a
和b
两个向量v
,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
}
除了使用高斯消元法来解决这个系统,还有其他方法吗?或者这是处理这个问题的最佳(或至少是可接受的)方式?
编辑:定义vector2
typedef union vector2
{
float v[2];
struct { float x, y; };
} vector2;
a
并且b
也是 type vector2
,因为点和向量之间的唯一区别在于它通过仿射变换进行变换的方式。