Представление линий y = mx + c проблематично для компьютерной графики, потому что вертикальные линии требуют, чтобы m было бесконечным.
Кроме того, линии в компьютерной графике имеют начальную и конечную точки, в отличие от математических линий, которые имеют бесконечную протяженность. Обычно пересечение линий вызывает интерес только в том случае, если точка пересечения лежит на обоих рассматриваемых отрезках.
Если у вас есть два отрезка, один из векторов от x1 до x1 + v1, а другой от векторов от x2 до x2 + v2, определите:
a = (v2.v2 v1.(x2-x1) - v1.v2 v2.(x2-x1)) / ((v1.v1)(v2.v2) - (v1.v2)^2)
b = (v1.v2 v1.(x2-x1) - v1.v1 v2.(x2-x1)) / ((v1.v1)(v2.v2) - (v1.v2)^2)
где для векторов p = (px, py), q = (qx, qy), p.q - это скалярное произведение (px * qx + py * qy). Сначала проверьте, если (v1.v1) (v2.v2) = (v1.v2) ^ 2 - если это так, линии параллельны и не пересекаются.
Если они не параллельны, то если 0 <= a <= 1 и 0 <= b <= 1, точка пересечения лежит на обоих отрезках линии и задается точкой </p>
x1 + a * v1
Редактировать Вывод уравнений для a и b выглядит следующим образом. Точка пересечения удовлетворяет векторному уравнению
x1 + a*v1 = x2 + b*v2
Взяв точечное произведение этого уравнения с v1
и с v2
, мы получим два уравнения:
v1.v1*a - v2.v1*b = v1.(x2-x1)
v1.v2*a - v2.v2*b = v2.(x2-x1)
, которые образуют два линейных уравнения для a и b. Решение этой системы (путем умножения первого уравнения на v2.v2 и второго на v1.v1 и вычитания или иным образом) дает уравнения для a и b.