Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
MariaFitzgerald
0 / 0 / 11
Регистрация: 06.03.2017
Сообщений: 106
Завершенные тесты: 1
#1

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

21.07.2017, 19:59. Просмотров 283. Ответов 5
Метки нет (Все метки)


http://www.cyberforum.ru/cpp-beginners/thread1013530.html
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.07.2017, 19:59
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Определите, лежит ли заданная точка внутри заданного треугольника (C++):

Определить, лежит ли заданная точка на одной из сторон треугольника, заданного координатами своих вершин
1. Определить, лежит ли заданная точка на одной из сторон треугольника,...

Лежит ли точка М(xm;ym) внутри треугольника, заданного координатами своих вершин
Лежит ли точка М(xm;ym) внутри треугольника, заданного координатами своих...

Определить лежит ли точка внутри треугольника
Треугольник и точка (№102) В декартовой системе координат на плоскости заданы...

Определить лежит ли точка внутри треугольника
Вершины треугольника имеют координаты (0, 0), (0, a), (b, 0). Определить, лежит...

Определить, лежит ли точка с заданными координатами внутри треугольника
Как с помощью этого решить это: Определите, лежит ли точка с координатами (x0,...

5
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4371 / 2346 / 654
Регистрация: 18.10.2014
Сообщений: 3,996
21.07.2017, 21:19 #2
Лучший ответ Сообщение было отмечено MariaFitzgerald как решение

Решение

Цитата Сообщение от MariaFitzgerald Посмотреть сообщение
Что не так?
В общем идея правильная, но ситуации, когда точка лежит точно на стороне у вас обработаны неправильно.

Условие a == 0 на самом деле означает, что точка лежит на прямой, содержащей соответствующую сторону A. Точка может лежать на прямой, содержащей сторону A, далеко за пределами треугольника. При этом a будет равно 0. Поэтому ваше

C++
1
if((a == 0 || b == 0 || c == 0)) printf("On");
это неправильно. Правильнее будет

C++
1
2
3
if ((a > 0 && b > 0 && c > 0) || (a < 0 && b < 0 && c < 0)) printf("In");
else if ((a >= 0 && b >= 0 && c >= 0) || (a <= 0 && b <= 0 && c <= 0)) printf("On");
else printf("Out");
1
palva
3094 / 2228 / 447
Регистрация: 08.06.2007
Сообщений: 8,126
Записей в блоге: 4
21.07.2017, 21:31 #3
(Вы считаете ориентированные площади треугольников 102 203 301. Лучше считать площади треугольников 132 203 301, чтобы точка 3 принадлежала всем треугольникам.) Здесь не читать.
Тогда: если все площади неположительны или все неотрицательны, то точка внутри или на границе. Если вдобавок одна из площадей нулевая, то точка лежит на стороне, две площади нулевые - точка совпадает с вершиной.

Добавлено через 5 минут
Извините, был неправ. Увидел в вашем коде, что четвертую точку вы вводите в начало массива.
Вы правильно вычисляете площади, а дальше действуйте по описанной мной логике.
1
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4371 / 2346 / 654
Регистрация: 18.10.2014
Сообщений: 3,996
21.07.2017, 21:33 #4
Цитата Сообщение от palva Посмотреть сообщение
Вы считаете ориентированные площади треугольников 102 203 301. Лучше считать площади треугольников 132 203 301.
Тогда: если все площади неположительны или все неотрицательны, то точка внутри или на границе.
Это как это?

Пусть точка 0 располагается в створе угла 231. Площади 132, 203 и 301 при этом будут иметь одинаковый знак. Но при этом точка 0 может располагаться как угодно далеко за пределами треугольника, оставаясь в створе угла 231. Ваш критерий при этом будет утверждать, что точка находится внутри треугольника.
1
palva
3094 / 2228 / 447
Регистрация: 08.06.2007
Сообщений: 8,126
Записей в блоге: 4
21.07.2017, 21:44 #5
TheCalligrapher, да, я уже признал, что неправ. Я почему-то подумал, что точки следуют в массиве в том порядке в котором идут на вводе. А когда взглянул на код, то схватился за голову. (Не в массиве, конечно, а в нумерованных переменных.)

Добавлено через 5 минут
C++
1
2
3
4
5
6
7
if ((a >= 0 && b >= 0 && c >= 0) || (a <= 0 && b <= 0 && c <= 0))
    if(a==0 || b==0 || c==0)
        printf("On");
    else
        printf("In");
else
    printf("Out");
1
MariaFitzgerald
0 / 0 / 11
Регистрация: 06.03.2017
Сообщений: 106
Завершенные тесты: 1
21.07.2017, 23:25  [ТС] #6
TheCalligrapher, большое спасибо, все получилось!)
0
21.07.2017, 23:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.07.2017, 23:25
Привет! Вот еще темы с решениями:

Проверить, лежит ли точка с заданными координатами внутри треугольника
Как уже сказано нужна программа которая будет выводить: true: если координата...

Определить, лежит ли точка внутри треугольника. Исправить код
Доброго времени суток. Помогите, пожалуйста, исправить код. Преподаватель...

Определить лежит ли точка внутри заданного прямоугольника
Даны стороны прямоугольника a и b, Составить программу, определяющую лежит ли...

Определить лежит ли данная точка внутри окружности заданного радиуса
помогите пж ))) в заголовке нельзя писать это номер 1: Ввести с клавиатуры...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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