Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/29: Рейтинг темы: голосов - 29, средняя оценка - 4.83
1 / 1 / 0
Регистрация: 06.03.2017
Сообщений: 109

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

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

Студворк — интернет-сервис помощи студентам
У меня проходит 95%. Что не так?

Входные данные
Первые 3 строки содержат координаты вершин треугольника (в каждой строке по 2 целых числа, разделенных пробелом). Четвертая строка содержит координаты точки, в таком же формате. Все числа – целые, по модулю не превосходящие 10000. Гарантируется, что вершины треугольника не лежат на одной прямой.
Выходные данные
Единственная строка содержит слово «In», если точка лежит внутри треугольника, «On», если точка лежит на границе треугольника (вершине либо стороне), или «Out», если она лежит вне него.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<stdio.h>
#include<math.h>
int main()
{    
int x1,y1,x2,y2,x3,y3,x0,y0,a,b,c;
scanf("%d %d %d %d %d %d %d %d",&x1,&y1,&x2,&y2,&x3,&y3,&x0,&y0);
a=(x1 - x0) * (y2 - y1) - (x2 - x1) * (y1 - y0);
b=(x2 - x0) * (y3 - y2) - (x3 - x2) * (y2 - y0);
c=(x3 - x0) * (y1 - y3) - (x1 - x3) * (y3 - y0);
if((a > 0 && b > 0 && c > 0) || (a < 0 && b < 0 && c < 0)) printf("In");
else if((a == 0 || b == 0 || c == 0)) printf("On");
else printf("Out");
return 0;
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.07.2017, 19:59
Ответы с готовыми решениями:

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

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

Лежит ли точка М(xm;ym) внутри треугольника, заданного координатами своих вершин
Лежит ли точка М(xm;ym) внутри треугольника, заданного координатами своих вершин A(xa;ya), B(xb;yb), C(xc;yc) на плоскости

5
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
21.07.2017, 21:19
Лучший ответ Сообщение было отмечено 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
4272 / 2966 / 691
Регистрация: 08.06.2007
Сообщений: 9,915
Записей в блоге: 4
21.07.2017, 21:31
(Вы считаете ориентированные площади треугольников 102 203 301. Лучше считать площади треугольников 132 203 301, чтобы точка 3 принадлежала всем треугольникам.) Здесь не читать.
Тогда: если все площади неположительны или все неотрицательны, то точка внутри или на границе. Если вдобавок одна из площадей нулевая, то точка лежит на стороне, две площади нулевые - точка совпадает с вершиной.

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

Пусть точка 0 располагается в створе угла 231. Площади 132, 203 и 301 при этом будут иметь одинаковый знак. Но при этом точка 0 может располагаться как угодно далеко за пределами треугольника, оставаясь в створе угла 231. Ваш критерий при этом будет утверждать, что точка находится внутри треугольника.
1
 Аватар для palva
4272 / 2966 / 691
Регистрация: 08.06.2007
Сообщений: 9,915
Записей в блоге: 4
21.07.2017, 21:44
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
1 / 1 / 0
Регистрация: 06.03.2017
Сообщений: 109
21.07.2017, 23:25  [ТС]
TheCalligrapher, большое спасибо, все получилось!)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.07.2017, 23:25
Помогаю со студенческими работами здесь

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

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

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

Определить, лежит ли точка внутри треугольника. Исправить код
Доброго времени суток. Помогите, пожалуйста, исправить код. Преподаватель требует без структур и функций, помимо int main(). ...

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru