2016-10-30 5 views
2

Как найти точку пересечения линий 1 и lin2, если обе линии определены через x, y, alpha, где x, y - координаты точки на линии, а альфа - это угол между линией и x = const?Формула для нахождения точки пересечения двух линий

Я пробовал применить теорему синуса, но он дает два ответа (треугольники могут быть построены по обеим сторонам линии). Я могу проверить, какая точка формирует правильный уклон с одной из точек, но это уродливо.

Я могу переключиться на представление y = ax + b, но тогда у меня есть особые случаи, о которых я должен беспокоиться. Вертикальные и горизонтальные линии должны быть по-разному, чтобы избежать деления на ноль в случаях 1/sin (альфа) и 1/cos (альфа).

Я не ищу реализацию на определенном языке, просто формулу.

Эти вопросы не актуальны, поскольку они касаются конечных сегментов линии, а не линий.

Given two points and two vectors, find point of intersection
How do you detect where two line segments intersect?

ответ

2

Пусть line 1 определяется [x1, y1] и alpha1 и line 2 по [x2, y2] и alpha2.

Предположим, k1 = tan(alpha1) и k2 = tan(alpha2).

Тогда формула для X-координата пересечения

x = (y2 - y1 + k1 * x1 - k2 * x2)/(k1 - k2) 

Примечание: Функция tan не определен для углов pi/2 + k * pi (где k является произвольное целое число), так что:

если k1 является не определено, то x = x1 и y = y2 + k2 * (x1 - x2)

, если k2 является неопределенным , то x = x2 и y = y1 + k1 * (x2 - x1)

(оба практически совпадают с обменом индексов 1 < -> 2).

+1

Есть ли способ, чтобы избежать проверки для 'Если (aplha1! = Пи/2)'? Углы гарантированно будут отличаться, но один из них может быть pi/2, вызывающий ошибку div_zero для tan (pi/2). – Stepan

+0

Благодарим вас за предупреждение об этом специальном случае, я добавил свой ответ, чтобы включить его. – MarianD

1

Для линейного уравнения Y = aX + b, вы можете рассчитать a = tan(alpha).

Итак, если строка 1 определена как x, y и alpha, уравнение равно Y = tan(alpha) * X + b.

Теперь, чтобы найти b, вам нужна точка на вашей линии. Эта точка имеет координаты (x, y).

y = ax + b

b = y - ax

Так вы уравнение линии:

Y = tan(alpha) * X + (y - tan(alpha) * x)

Теперь у вас есть только решить уравнение линии:

Y = a1 * X + b1

Y = a2 * X + b2

Что:

a1 * X + b1 = a2 * X + b2

(a1 - a2) * X = b2 - b1

X = (b2 - b1)/(a1 - a2)

Прямо сейчас вы можете вычислить Y тоже.

Так, если заменить, то мы получим:

X = ((y2 - tan(alpha2) * x2) - (y1 - tan(alpha1) * x1))/(tan(alpha1) - tan(alpha2)

упрощенный:

X = (y2 - y1 - tan(alpha2) * x2 + tan(alpha1) * x1))/(tan(alpha1) - tan(alpha2)

И потом:

Y = tan(alpha1) * X + (y - tan(alpha1) * x

+1

Тот же вопрос - что, если одна строка вертикальна и tan (90) = бесконечность? – Stepan

+0

Вам нужно проверить это, прежде чем выполнять свою математику. – Ludonope

+0

У вас нет другого способа, если вы используете этот метод (есть, возможно, другие методы, в которых вам не нужно его проверять) – Ludonope

 Смежные вопросы

  • Нет связанных вопросов^_^