Учитывая две точки и два вектора, найдите точку пересечения [дубликат]
Возможный дубликат:
Как определить, где пересекаются два отрезка?
Учитывая два балла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
также имеют типvector2
потому что единственная разница между точкой и вектором заключается в том, как она трансформируется аффинным преобразованием.