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

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как рассчитать, где пересекаются два отрезка?

Сообщение Anonymous »


Я применил формулу пересечения отрезков линии от GeeksForGeeks. Она отлично работает, но мне также нужно знать точку пересечения этих двух отрезков линии. Как я могу изменить код, чтобы сделать это? (С++)

Сначала идет класс Point (на самом деле это просто двухмерный вектор)

#include использование пространства имен std; структура Point { интервал х; интервал y; }; Эта функция проверяет, находятся ли две точки на одном сегменте.

// Учитывая три коллинеарные точки p, q, r, функция проверяет, // точка q лежит на отрезке 'pr' bool onSegment (точка p, точка q, точка r) { if (q.x = min(p.x, r.x) && q.y = min(p.y, r.y)) вернуть истину; вернуть ложь; } Этот поиск вращения упорядоченного триплета.

// Чтобы найти ориентацию упорядоченного триплета (p, q, r). // Функция возвращает следующие значения // 0 --> p, q и r коллинеарны // 1 --> По часовой стрелке // 2 --> Против часовой стрелки int ориентация (точка p, точка q, точка r) { // См. https://www.geeksforgeeks.org/orientati ... ed-points/. // для получения подробной информации о приведенной ниже формуле. int val = (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y); если (значение == 0) вернуть 0; // коллинеарно вернуть (значение > 0)? 1:2; // по часовой стрелке или против часовой стрелки } // Основная функция, которая возвращает true, если сегмент линии 'p1q1' // и 'p2q2' пересекаются. И, наконец, функции, проверяющие пересечение. Но где это произошло?
bool doIntersect(Точка p1, Точка q1, Точка p2, Точка q2) { // Найдите четыре ориентации, необходимые для общего и // Особые случаи int o1 = ориентация (p1, q1, p2); int o2 = ориентация (p1, q1, q2); int o3 = ориентация (p2, q2, p1); int o4 = ориентация (p2, q2, q1); // Общий случай если (o1 != o2 && o3 != o4) вернуть истину; // Особые случаи // p1, q1 и p2 коллинеарны и p2 лежит на отрезке p1q1 if (o1 == 0 && onSegment(p1, p2, q1)) возвращает true; // p1, q1 и q2 коллинеарны и q2 лежит на отрезке p1q1 if (o2 == 0 && onSegment(p1, q2, q1)) возвращает true; // p2, q2 и p1 коллинеарны и p1 лежит на отрезке p2q2 if (o3 == 0 && onSegment(p2, p1, q2)) возвращает true; // p2, q2 и q1 коллинеарны и q1 лежит на отрезке p2q2 if (o4 == 0 && onSegment(p2, q1, q2)) возвращает true; вернуть ложь; // Не падает ни в одном из вышеперечисленных случаев }
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»