可能重复:
How do you detect where two line segments intersect?给定两个点和两个向量,找到交点
考虑两点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
}
除了使用高斯消元来解决这个系统还有别的方法吗?或者,这是最好的(或至少是可以接受的)方式来处理这个问题?
EDIT: 定义的vector2
typedef union vector2
{
float v[2];
struct { float x, y; };
} vector2;
a
和b
也vector2
类型的,因为一个点和向量之间的唯一区别是在它是由仿射变换变换的方式。
'vector2'是如何定义的?为什么* points * a和b也是'vector2'类型? –
我的解释如下。但不管。为什么vector不仅仅是一个结构?为什么你需要工会和“阵列”? –
这个问题已被Gareth Rees,Paul R,Mark Dickinson和0xbadf00d标记为重复,因为“此问题已被询问并且已经有答案。”。 **但是**这个问题在撰写本文时没有被接受的答案。我不认为应该将问题标记为重复,除非所引用的问题具有可接受的答案。 – user316117