Задать вопрос
@di_gangsta

Как Найти точку пересечения 2х прямых, зная только 2 точки каждой прямой?

Нам дано 4 точки(2пары):
(x1,y1) и (x2,y2)

(x3,y3) и (x4,y4)

Известно, что они НЕ параллельны и пересекаются в какой-то точке. Вопрос - как найти эту точку?

Если можно то какую-нибудь формулу или просто код (на Java) Заранее спасибо!
  • Вопрос задан
  • 3464 просмотра
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
public static boolean isLinesIntercepts(Pair<Float, Float> start1, Pair<Float, Float> end1, Pair<Float, Float> start2, Pair<Float, Float> end2) {
        double vector1 = (end2.first - start2.first) * (start1.second - start2.second) - (end2.second - start2.second) * (start1.first - start2.first);
        double vector2 = (end2.first - start2.first) * (end1.second - start2.second) - (end2.second - start2.second) * (end1.first - start2.first);
        double vector3 = (end1.first - start1.first) * (start2.second - start1.second) - (end1.second - start1.second) * (start2.first - start1.first);
        double vector4 = (end1.first - start1.first) * (end2.second - start1.second) - (end1.second - start1.second) * (end2.first - start1.first);
        return ((vector1 * vector2 <= 0) && (vector3 * vector4 <= 0));
    }


можно было и загуглить
Ответ написан
AnnTHony
@AnnTHony
Интроверт
Уравнение прямой по двум точкам
Точка пересечения двух прямых
Ответ написан
Комментировать
Псевдокод:
vec_t = left.end - left.start;
vec_k = right.end - right.start;
r = right.start - left.start;
d = vec_t ⋅ vec_k;
if (d ≃ 0.0)
	return; // параллельны
d_t = r ⋅ vec_k;
d_k = r ⋅ vec_t;
t = d_t / d; // параметр на одном отрезке ∈ [0, 1]
k = d_k / d; // на втором отрезке ∈ [0, 1]
if (t ∈ [0, 1] ∧ k ∈ [0, 1])
	pt = left.start + t ⋅ vec_t = right.start + k ⋅ vec_k;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы