Учитывая две точки и два вектора, найдите точку пересечения [дубликат]

Возможный дубликат:

Как определить, где пересекаются два отрезка?

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

Ответы на вопрос(2)

Ваш ответ на вопрос