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

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

Восстановить пароль Регистрация
 
 
Programer101
0 / 0 / 0
Регистрация: 04.12.2012
Сообщений: 48
25.12.2013, 08:04     Пренадлежит ли точка треугольнику #1
Треугольник задан координатами вершин. Определить, принадлежит ли точка M(x,y) треугольнику.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.12.2013, 08:04     Пренадлежит ли точка треугольнику
Посмотрите здесь:

C++ Треугольник задан вершинами (x1,y1), (x2,y2), (x3,y3). Принадлежит ли заданная точка (x,y) указанному треугольнику.
что происходит со старым конструктором когда я создаю новый, пренадлежащий производному типу? (первый конструктор пренадлежит базовому типу) C++
C++ принадлежит ли точка с координатами (x, y) треугольнику
C++ Дана точка A(x; y) на координатной плоскости. Определить, принадлежит ли она треугольнику с вершинами в точках .
Определить принадлежит ли точка треугольнику C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 5
Завершенные тесты: 1
25.12.2013, 13:03     Пренадлежит ли точка треугольнику #21
Ну уж если вам действительно нечем заняться давайте пободоемся.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int Point::classify(Point &p0, Point &pl)
{
  Point p2 = *this;
  Point a = p1 - pO;//+1
  Point b = p2 - pO;//+1
  double sa = a. x * b.y - b.x * a.y;//+3
  if (sa > 0.0)
    return LEFT;//здесь большой шанс выйти из функции.
  if (sa < 0.0)
    return RIGHT;//здесь большой шанс выйти из функции.
  if ((a.x * b.x < 0.0) || (a.y * b.y < 0.0))
    return BEHIND;
  if (a.length() < b.length())
    return BEYOND;
  if (pO == p2)
    return ORIGIN;
  if (p1 == p2)
    return DESTINATION;
  return BETWEEN;
}

И таких вызовов три.
Повторюсь еще раз мне не хочется вам, что либо доказывать...
Вам метод не универсален, так как не дает правильного ответа если точки лежат на одной прямой. Придется лепить костыли. Это раз. Все вычисления в ваше алгоритме придется выполнять полностью в отличае от второго метода.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SatanaXIII
25.12.2013, 13:09
  #22

Не по теме:

Цитата Сообщение от valeriikozlov Посмотреть сообщение
Если точки образующие треугольник лежат на одной прямой то это не треугольник
Кстати по моему называется вырожденный треугольник.

valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
25.12.2013, 13:44     Пренадлежит ли точка треугольнику #23
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Кстати по моему называется вырожденный треугольник.
Цитата Сообщение от Ilot Посмотреть сообщение
Point a = p1 - pO;//+1
тут неправильно. смотрим здесь:
C++
1
2
3
4
Point Point::operator- (Point &p)
{
  return Point (x - р.х, у - p. у);
}
так что не +1, а +2
Но давайте попорядку. Начнем с этого:
Цитата Сообщение от Ilot Посмотреть сообщение
Вам метод не универсален, так как не дает правильного ответа если точки лежат на одной прямой.
(кстати это не мой метод)
Здесь два случая: точка M не лежит на этой прямой - в этом случае будет правильный ответ. В случае если точка М лежит на этой прямой, то будет ответ неправильный. Но это не недостаток. В первом алгоритме отдельно расчитывается для трех отрезков: принадлежит ли точка М этим отрезкам или нет. Во втором варианте можно даже проще сделать эту проверку: например так - если площадь треугольника равна 0, и сумма площадей трех треугольников равна 0, то берем самый длинный отрезок и проверяем принадлежность точки М только ему, а не всем трем.
Цитата Сообщение от Ilot Посмотреть сообщение
Придется лепить костыли.
придется лепить один костыль, в отличие от трех таких же в первом методе.

Цитата Сообщение от Ilot Посмотреть сообщение
Все вычисления в ваше алгоритме придется выполнять полностью в отличае от второго метода.
это не показатель. Я могу например сделать так: расчитываю площадь основного треугольника S (7 операций), расчитываю площадь первого треугольника s1 (еще 7 операций). Сравниваю их сразу и если s1 уже больше S сразу выдаю ответ - не принадлежит. И могу утверждать что второй способ лучше первого , т.к. у него в лучшем случае всего 14 операций и одно сравнение.

Добавлено через 8 минут
кстати про этот случай:
Цитата Сообщение от Ilot Посмотреть сообщение
если точки лежат на одной прямой.
именно в этом случае в "суперском" первом методе происходит проверка на равенство вещественных чисел. А это значит что именно первый метод:
Цитата Сообщение от Ilot Посмотреть сообщение
может стать тот бомбой замедленного действия которая однажды опрокинет вашу программу и вам придется долго и нудно искать причину такого поведения.
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 5
Завершенные тесты: 1
25.12.2013, 14:04     Пренадлежит ли точка треугольнику #24
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Здесь два случая: точка M не лежит на этой прямой - в этом случае будет правильный ответ. В случае если точка М лежит на этой прямой, то будет ответ неправильный. Но это не недостаток. В первом алгоритме отдельно расчитывается для трех отрезков: принадлежит ли точка М этим отрезкам или нет. Во втором варианте можно даже проще сделать эту проверку: например так - если площадь треугольника равна 0, и сумма площадей трех треугольников равна 0, то берем самый длинный отрезок и проверяем принадлежность точки М только ему, а не всем трем.
Костыль.
именно в этом случае в "суперском" первом методе происходит проверка на равенство вещественных чисел. А это значит что именно первый метод:
Ошибаетесь. Так как сравниваются два исходных числа, а не результат их преобразования. Как говорил Кузьма Прутков: смотри в корень!
это не показатель. Я могу например сделать так: расчитываю площадь основного треугольника S (7 операций), расчитываю площадь первого треугольника s1 (еще 7 операций). Сравниваю их сразу и если s1 уже больше S сразу выдаю ответ - не принадлежит. И могу утверждать что второй способ лучше первого , т.к. у него в лучшем случае всего 14 операций и одно сравнение.
Я же написал арматизационное число. Вероятность того, что точка попадет на прямые задающие треугольник крайне мала. В отличает от вероятности, что новый треугольник, образованный исследуемой точкой, будет больше исходного.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
25.12.2013, 14:20     Пренадлежит ли точка треугольнику #25
Цитата Сообщение от Ilot Посмотреть сообщение
Костыль.
а в первом варианте этих же костылей уже три )

Не по теме:

ладно пора заканчивать - доказать мне что первый вариант реально лучше второго вы не сумели и чуствую не сумеете. просто слова что он лучше, я не принимаю в расчет )

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.12.2013, 18:57     Пренадлежит ли точка треугольнику
Еще ссылки по теме:

Определить, принадлежит ли данная точка треугольнику C++
C++ как в c++ проверить пренадлежит ли переменная определенному типу?
C++ Определить принадлежит ли точка треугольнику

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

Или воспользуйтесь поиском по форуму:
sergei60
47 / 28 / 4
Регистрация: 10.06.2012
Сообщений: 334
26.12.2013, 18:57     Пренадлежит ли точка треугольнику #26
Я находил попадает ли точка с одной стороны или с другой от отрезка так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  #include <iostream>
    #include <cmath>
  using namespace std;
     
    int main () {
    double x1,x2,y1,y2,;
    cout<<"введем координаты отрезка ";
    cin>>x1>>x2>>y1>>y2;
cout<<"введем координаты проверяемой точки";
     cin>>x>>y;
  if(y>2*(y1-y2)*(x-x1)/(x2-x1)+y2)
   cout<<"c одной стороны";
   else
   cout <<"c другой стороны";
return 0;
    }
Можно так же решить для трех отрезков ,которые образуют треугольник. Может этот способ имеет недостатки ,но все же.. может как то поможет в решении.
Yandex
Объявления
26.12.2013, 18:57     Пренадлежит ли точка треугольнику
Ответ Создать тему
Опции темы

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