Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Андей
0 / 0 / 0
Регистрация: 20.09.2014
Сообщений: 144
#1

Пересечение отрезка и треугольника - C++

27.06.2016, 11:29. Просмотров 328. Ответов 9
Метки нет (Все метки)

Ребят, помогите решить проблему. Имеется отрезок(известны координаты начала и конца) и треугольник(известны координаты вершины). Надо найти пересекает ли отрезок треугольник или нет.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.06.2016, 11:29     Пересечение отрезка и треугольника
Посмотрите здесь:

Пересечение луча и отрезка - C++
Помогите решить задачу: пересекает ли луч отрезок. Дано: начало луча О(х0, y0); луч параллелен оси Ox, и сонаправлен с ней отрезок AB...

Пересечение сторонами треугольника вписанной окружности. Подскажите алгоритм - C++
На плоскости заданы множество точек и окружность радиусом R с центром в начале координат. Построить множество всех треугольников с...

Структура: вывести в консоль координаты точки, отрезка треугольника - C++
С Новым Годом! точка, отрезок, треугольник и вывести в консоль координаты точки, отрезка треугольника. Спасибо!

Найти периметр треугольника, определив функцию, рассчитывающую длину отрезка по координатам его вершин - C++
Найдите периметр треугольника, заданного координатами вершин, определив функцию, рассчитывающую длину отрезка по координатам его вершин. ...

матрица разделена диагоналями на 4 треугольника, элементы верхнего и нижнего треугольника нулевые - C++
Задание матрица разделена диагоналями на 4 треугольника, элементы верхнего и нижнего треугольника нулевые.Не понимаю,как сделать???помогите...

Написать программу, которая считывает длины сторон треугольника, проверяет возможность построения треугольника и находит все медианы этого треуголника - C++
Написать программу, которая считывает длины сторон треугольника, проверяет возможность построения треугольника и находит все медианы этого...

Пересечение прямоугольников - C++
В прямоугольной системе координат (оси расположены слева направо и сверху вниз) заданы два прямоугольника (стороны параллельны осям). Найти...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Raali
623 / 327 / 34
Регистрация: 06.07.2013
Сообщений: 1,056
Завершенные тесты: 1
27.06.2016, 11:58     Пересечение отрезка и треугольника #2
качаешь библиотеку glm
потом - glm::gtx::intersectLineTriangle
Андей
0 / 0 / 0
Регистрация: 20.09.2014
Сообщений: 144
27.06.2016, 13:08  [ТС]     Пересечение отрезка и треугольника #3
А если без доп библиотек?
_liv_
212 / 212 / 81
Регистрация: 07.10.2015
Сообщений: 595
Завершенные тесты: 1
27.06.2016, 13:24     Пересечение отрезка и треугольника #4
Андей, вспоминаем математику
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
typedef struct _point 
{
    double x;
    double y;
}point;
 
// вычисляет положение точки D относительно AB
// важен знак
int g(point a, point b, point d) 
{
    double r = (d.x - a.x) * (b.y - a.y) - (d.y - a.y) * (b.x - a.x);
    if (fabs(r) < 0.000001)
        return 0;
    else if (r < 0)
        return -1;
    else return 1;
}
 
// возвращает 1/0, если отрезок [x,y] пересекает/не пересекает треугольник abc
bool f(point a, point b, point c, point x, point y) 
{
    // r1 == 3 -> треугольник по одну сторону от отрезка
    bool r1 = (3 != abs(g(x,y,a) + g(x,y,b) + g(x,y,c)));
    // r2 == 2 -> точки x,y по одну сторону от стороны ab
    bool r2 = (2 != abs(g(a,b,x) + g(a,b,y)));
    // r3 == 2 -> точки x,y по одну сторону от стороны bc
    bool r3 = (2 != abs(g(b,c,x) + g(b,c,y)));
    // r4 == 2 -> точки x,y по одну сторону от стороны ca
    bool r4 = (2 != abs(g(c,a,x) + g(c,a,y)));
    // r2 == r3 == r4 == 2 -> точки x,y по одну сторону от треугольника abс
 
    return (r1 && (r2 || r3 || r4));
}
 
int main() 
{
    point   a = {1,1};
    point   b = {5,5};
    point   c = {6,0};
    
    point   x = {1, 5};
    point   y = {2, 4};
   
    printf ("%d\n",f(a,b,c,x,y));
   
    return 0;
}
Андей
0 / 0 / 0
Регистрация: 20.09.2014
Сообщений: 144
27.06.2016, 14:30  [ТС]     Пересечение отрезка и треугольника #5
Ясно, спасибо)а если в объеме, то есть у точки x y z координаты?
_liv_
212 / 212 / 81
Регистрация: 07.10.2015
Сообщений: 595
Завершенные тесты: 1
27.06.2016, 14:40     Пересечение отрезка и треугольника #6
Андей, аналогично
Андей
0 / 0 / 0
Регистрация: 20.09.2014
Сообщений: 144
27.06.2016, 17:06  [ТС]     Пересечение отрезка и треугольника #7
Перед этим мне надо сначала узнать лежат ли треугольник и отрезок в одной плоскости. Правильно ли я понимаю
shilko2013
240 / 217 / 117
Регистрация: 02.04.2016
Сообщений: 827
Завершенные тесты: 1
27.06.2016, 17:07     Пересечение отрезка и треугольника #8
Андей, Это решение для фигур только в одной плоскости
Mr.X
Эксперт С++
3048 / 1693 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
27.06.2016, 17:15     Пересечение отрезка и треугольника #9
Цитата Сообщение от Андей Посмотреть сообщение
а если в объеме, то есть у точки x y z координаты?
Ну, для начала сформулировать что вы подразумеваете под
Цитата Сообщение от Андей Посмотреть сообщение
пересекает ли отрезок треугольник или нет.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.06.2016, 20:44     Пересечение отрезка и треугольника
Еще ссылки по теме:

Пересечение пятиугольников - C++
Здравствуйте. Собственно сабж. Вообще по заданию нужно определить только факт пересечения, но мне было бы интересно и сами точки найти. Из...

задача на пересечение - C++
В этой задаче необходимо определить, пересекается ли прямая с окружностью. я нахожу дискриминант и затем нужно записать условие, но как его...

Пересечение контейнеров - C++
Пытаюсь пересечь контейнеры(чтобы не было повторяющихся элементов),но выдает vector iterators incompatible ,если перед итераторами ничего...

Пересечение треугольников - C++
Надо определить, пересекаютя ли треугольники. Наличие общей грани нельзя считать пересечением, но если один треугольник лежит внутри...

Пересечение множеств - C++
Здравствуйте. У меня следующая задача: Даны 2 множества A и B, причем множество B отсортировано по возрастанию. Необходимо получить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Андей
0 / 0 / 0
Регистрация: 20.09.2014
Сообщений: 144
27.06.2016, 20:44  [ТС]     Пересечение отрезка и треугольника #10
То есть имеется отрезок начальная точка ,которого находиться до треугольника, а конечная после него. И надо узнать этот отрезок проходит через этот треугольник или мимо него. И если проходит, то узнать эту точку пересечения.
Yandex
Объявления
27.06.2016, 20:44     Пересечение отрезка и треугольника
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru