Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2011, 22:59   #1
Karlsson)))
 
Регистрация: 18.12.2010
Сообщений: 3
Вопрос выпуклый N-угольник

Здравствуйте!

Помогите пожалуйста со следующей проблемой.
Дана задача:
На плоскости задается выпуклый N-угольник целочисленными кооpдинатами своих веpшин в порядке обхода по контуpу. Вводятся кооpдинаты точки (X,Y). Опpеделить:
a) является ли она веpшиной N-угольника;
б) пpинадлежит ли она N-угольнику.
Все работает, находит.Вот только не получается составить условие, при котором точка принадлежит ребру многоугольника. У меня выводит это сообщение, когда точка лежит внутри многоугольника.

uses crt;
type
tpoint=record
x,y:integer;
end;
var
PG: array[1..100] of TPoint;
n,i: integer;
result: boolean;
x,y:integer;
begin
clrscr;
write('количество вершин многоугольника*: ');
readln(n);

for i:=1 to n do begin
write('введите координаты x ',i,'ой точки: ');
readln(pg[i].x);
write('введите координаты y ',i,'ой точки: ');
readln(pg[i].y);
end;

write('введите координату x искомой точки: ');
readln(x);
write('введите координату y искомой точки: ');
readln(y);

for i:=1 to n do
if (X=PG[i].X) and (Y=PG[i].Y) then begin
writeln('’®зЄ* (',x,',',y,') пў«пҐвбп ®¤*®© Ё§ ўҐаиЁ* ¬*®Ј®гЈ®«м*ЁЄ*');
repeat until keypressed;
exit;
end;

Result := False;

for i:=1 to n-1 do
begin
{ if (Y > PG[i].Y) <> (Y <= PG[i+1].Y) then Continue;
if (X - PG[i].X) < (Y - PG[i].Y)*(PG[i+1].X - PG[i].X)/(PG[i+1].Y - PG[i].Y)
then Result := not Result; }


if (Y >= PG[i].Y) <> (Y< PG[i+1].Y) then Continue;
writeln('’®зЄ* (',x,',',y,') **находится на ребре');
if (X - PG[i].X) < (Y - PG[i].Y)*(PG[i+1].X - PG[i].X)/(PG[i+1].Y - PG[i].Y)
then Result := not Result;
end;


if Result then
writeln('точка* (',x,',',y,') **находится внутри многоугольника*')
else
writeln('точка* (',x,',',y,') **находится за пределами многоугольника*');
repeat until keypressed;
end.
Karlsson))) вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выпуклый четырехугольник Namyola Помощь студентам 2 12.06.2011 16:13
N-угольник на С++ Borland magic1 Помощь студентам 6 11.08.2010 16:47
Выпуклый N-угольник 6AZblJlb Паскаль, Turbo Pascal, PascalABC.NET 3 08.12.2008 21:35
Выпуклый N-угольник и его диагонали 6AZblJlb Помощь студентам 4 08.12.2008 00:15
Вписанная в выпуклый n-угольник окружность Nixond Паскаль, Turbo Pascal, PascalABC.NET 10 15.10.2008 13:28