Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 03.03.2010
Сообщений: 20

Поиск точки в треугольнике

15.05.2010, 18:45. Показов 2703. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно создать программу, которая будет вводить координаты треугольника и координаты точки и вычислять лежит ли точка внутри треугольника, снаружи или на линии.
Проблема заключается в том, что при задавании прямоугольного треугольника программа некорректно считает координаты точек. То есть при любых одинаковых значениях координат программа будет выдавать, что точка находится на линии треугольника.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
uses crt;
var xa,xb,xc,ya,yb,yc,tx,ty: real;
begin
clrscr;
writeln(' vvedite koordinatu vershin treygolnika po chasovoy strelke:');
readln(xa,ya,xb,yb,xc,yc)
writeln('vvedite koordinatu tochki:');
readln(tx,ty);
if ((tx-xa)*(ya-yb)-(ty-ya)*(xa-xb)<0)
and ((tx-xb)*(yb-yc)-(ty-yb)*(xb-xc)<0)
and ((tx-xc)*(yc-ya)-(ty-yc)*(xc-xa)<0) then
write ('tochka nahoditsya v treygolnike') else
if (tx-xa)*(ya-yb)-(ty-ya)*(xa-xb)=0)
or ((tx-xb)*(yb-yc)-(ty-yb)*(xb-xc)=0)
or ((tx-xc)*(yc-ya)-(ty-yc)*(xc-xa)=0) then
writeln ('tochka nahoditsya na linii treygolnika') else
wtriteln ('tochka nahoditsa vne treygolnika');
readln
end.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.05.2010, 18:45
Ответы с готовыми решениями:

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

Лежат ли точки в треугольнике.
ДАна следующая задача: Выбрать три различные точки из заданного множества точек на плоскости так, чтобы количество точек, лежащих внутри...

Нахождение точки в треугольнике
Дан треугольник ABC мы знаем три его вершины: A(0,0,0) B(5,5,5) ,C(10,10,0), нам дана точка которая лежит в треугольнике, мы знаем x и z...

5
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
15.05.2010, 19:15
Не понял о чем вы, но поправив пару ошибок, у меня работает корректно, если не учитывать, что у вас нет проверки на существование треугольника.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
uses crt;
var xa,xb,xc,ya,yb,yc,tx,ty: real;
begin
clrscr;
writeln(' vvedite koordinatu vershin treygolnika po chasovoy strelke:');
readln(xa,ya,xb,yb,xc,yc);
writeln('vvedite koordinatu tochki:');
readln(tx,ty);
if ((tx-xa)*(ya-yb)-(ty-ya)*(xa-xb)<0)
and ((tx-xb)*(yb-yc)-(ty-yb)*(xb-xc)<0)
and ((tx-xc)*(yc-ya)-(ty-yc)*(xc-xa)<0) then
write ('tochka nahoditsya v treygolnike') else
if ((tx-xa)*(ya-yb)-(ty-ya)*(xa-xb)=0)
or ((tx-xb)*(yb-yc)-(ty-yb)*(xb-xc)=0)
or ((tx-xc)*(yc-ya)-(ty-yc)*(xc-xa)=0) then
writeln ('tochka nahoditsya na linii treygolnika') else
writeln ('tochka nahoditsa vne treygolnika');
readln
end.
0
0 / 0 / 0
Регистрация: 03.03.2010
Сообщений: 20
15.05.2010, 19:22  [ТС]
задайте координаты треугольника к примеру:
-1 -1
2 2
2 -1
и координаты точки:
55
55
и программа выдаст ответ:

Что точка находится на линии треугольника.

Тут или как-то нужно ограничить поиск до максимальних(минимальных) координат треугольника... или искать другой метод) Ломаю голову уже второй день) Если есть идеи пишите!!
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
15.05.2010, 19:37
А, конечно. Вы же здесь
Pascal
1
2
3
4
if ((tx-xa)*(ya-yb)-(ty-ya)*(xa-xb)=0)
or ((tx-xb)*(yb-yc)-(ty-yb)*(xb-xc)=0)
or ((tx-xc)*(yc-ya)-(ty-yc)*(xc-xa)=0) then
writeln ('tochka nahoditsya na linii treygolnika') else
просто проверяете лежит ли точка на прямой, она и лежит, нужно же еще проверять, принадлежит ли она отрезку.

Добавлено через 3 минуты
Проще решать методом площадей, тем более и для вещественных чисел.
Pascal
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
uses crt;
const t=0.001;
type Point=record
           x,y:real;
           end;
{определение длины стороны}
function Dlina(a,b:Point):real;
begin
Dlina:=sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));
end;
{определение площади по Герону}
function Plosh(a,b,c:Point):real;
var p:real;
begin
p:=(Dlina(a,b)+Dlina(b,c)+Dlina(a,c))/2;
Plosh:=(sqrt(p*(p-Dlina(a,b))*(p-Dlina(b,c))*(p-Dlina(a,c))));
end;
{проверка внутри или нет}
function Proverka(a,b,c,d:Point):boolean;
var s,s1,s2,s3:real;
begin
s:=Plosh(a,b,c);{площадь данного треугольника}
s1:=Plosh(a,b,d);{1 маленький}
s2:=Plosh(a,c,d);{2}
s3:=Plosh(b,c,d);{3}
if abs((s1+s2+s3)-s)<t then Proverka:=true
{если площади равны с заданной точностью}
else Proverka:=false;{не равны}
end;
var a,b,c,d:Point;
begin
clrscr;
repeat
writeln('Введите координаты X,Y вершин треугольника:');
write('A:  ');readln(a.x,a.y);
write('B:  ');readln(b.x,b.y);
write('C:  ');readln(c.x,c.y);
{если площадь=0, не треугольник}
if  Plosh(a,b,c)<t then writeln('Это не треугольник! Повторите ввод.');
until Plosh(a,b,c)>t;
write('Ведите координаты X,Y точки внутри треугольника D:  ');
readln(d.x,d.y);
if Proverka(a,b,c,d) then writeln('Точка D лежит внутри треугольника!')
else writeln('Точка D не лежит внутри треугольника!');
readln
end.
1
0 / 0 / 0
Регистрация: 03.03.2010
Сообщений: 20
15.05.2010, 20:46  [ТС]
Ето прогрмамма тоже не правильно считает, ввела ее в компилятор.
Начала вводить координаты:
А -1 -1
Б 2 2
С 2 -1
координаты точки:
Д 1 0

Выводит, что точка лежит за треугольником.
Еще вопрос как тогда написать функцию чтоб она проверяла лежит ли точка на линии если нельзя манипулирывать индексами.
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
15.05.2010, 21:17
Выводит, что точка лежит за треугольником.
Это не есть правда.
Миниатюры
Поиск точки в треугольнике  
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.05.2010, 21:17
Помогаю со студенческими работами здесь

Написать код для точки в треугольнике
Привет.я понимаю,что сформулировать нормально у меня не получаеться.но я попробую Моя задача в том,что у меня есть треугольник ABC,он...

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

В треугольнике АВС Н и М – точки пересечения высот и медиан соответственно
В треугольнике АВС Н и М – точки пересечения высот и медиан соответственно. Найдите угол ВАС, если биссектриса этого угла перпендикулярна...

Поиск углов в треугольнике
Здравствуйте, подскажите в чем ошибка : Даны координаты вершин треугольника A ( 3 ,3 ,-1) B (1,5,-2) C (4,1,1) Нужно найти углы (все...

Переделать из консоли в VCL Forms (поиск оптимальных путей от точки А до точки Б)
Ребята, помогите) Нужно запилить это в С++ билдер) В консоли без проблем) Однако в билдер, что бы на форме мы вводили все нужные...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru