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

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

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

C++ Даны длины сторон треугольника, определить тип этого треугольника
матрица разделена диагоналями на 4 треугольника, элементы верхнего и нижнего треугольника нулевые C++
C++ Пересечение сторонами треугольника вписанной окружности. Подскажите алгоритм
Разработать методы вычисления длины отрезка по координатам вершин и периметра треугольника по длинам сторон C++
С клавиатуры вводятся три числа, считая их сторонами треугольника найти углы этого треугольника C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 1
27.06.2016, 11:58     Пересечение отрезка и треугольника #2
качаешь библиотеку glm
потом - glm::gtx::intersectLineTriangle
Андей
0 / 0 / 0
Регистрация: 20.09.2014
Сообщений: 123
27.06.2016, 13:08  [ТС]     Пересечение отрезка и треугольника #3
А если без доп библиотек?
_liv_
83 / 83 / 28
Регистрация: 07.10.2015
Сообщений: 239
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
Сообщений: 123
27.06.2016, 14:30  [ТС]     Пересечение отрезка и треугольника #5
Ясно, спасибо)а если в объеме, то есть у точки x y z координаты?
_liv_
83 / 83 / 28
Регистрация: 07.10.2015
Сообщений: 239
27.06.2016, 14:40     Пересечение отрезка и треугольника #6
Андей, аналогично
Андей
0 / 0 / 0
Регистрация: 20.09.2014
Сообщений: 123
27.06.2016, 17:06  [ТС]     Пересечение отрезка и треугольника #7
Перед этим мне надо сначала узнать лежат ли треугольник и отрезок в одной плоскости. Правильно ли я понимаю
shilko2013
 Аватар для shilko2013
238 / 215 / 116
Регистрация: 02.04.2016
Сообщений: 814
Завершенные тесты: 1
27.06.2016, 17:07     Пересечение отрезка и треугольника #8
Андей, Это решение для фигур только в одной плоскости
Mr.X
Эксперт С++
 Аватар для Mr.X
2802 / 1578 / 247
Регистрация: 03.05.2010
Сообщений: 3,666
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++
Известна гипотенуза С и противолежащий угол B прямоугольного треугольника. Найти периметр треугольника C++

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

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

Текущее время: 01:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru