Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.23;
Скачать: CL | DM;

Вниз

Задача на паскале...   Найти похожие ветки 

 
$tranger ©   (2004-05-09 20:21) [0]

Господа, помогите, плиз, решить задачу на паскале: "Задан призвольный многоугольник массивом координат своих вершин (x1,y1)...(xN,yN) в порядке их обхода, и точка (х,у). Определить, находится ли точка в многоугольнике"


 
pasha_golub ©   (2004-05-09 20:25) [1]

Требуется уточнение: многоугольик выкулый?

Если да, то рассматриваем знак тричлена для каждой из пар точек.


 
Palladin ©   (2004-05-09 20:28) [2]

от точки строится линия до окаймляющего прямоугольника и считается количество пересечений с ребрами многоугольника, персечение с углом многоугольника считается за единицу. четное количество - не входит, не четное - входит... для любого многоугольника.


 
cdadmitriy ©   (2004-05-09 20:29) [3]

http://alglib.manual.ru/geometry/ispip.php


 
cdadmitriy ©   (2004-05-09 20:30) [4]

FROM :
http://alglib.manual.ru/geometry/ispip.php

(************************************************
Этот модуль сгенерирован транслятором AlgoPascal.
************************************************)
uses Math, Ap;

function IsPointInPolygon(x : Double;
    y : Double;
    N : Integer;
    const XPO : TReal1DArray;
    const YPO : TReal1DArray):Boolean;forward;

function IsPointInPolygon(x : Double;
    y : Double;
    N : Integer;
    const XPO : TReal1DArray;
    const YPO : TReal1DArray):Boolean;
var
   I : Integer;
   XPI : TReal1DArray;
   YPI : TReal1DArray;
label __Finalizing;
begin
   //Initializers
   XPI := TReal1DArray.Create;
   YPI := TReal1DArray.Create;

   //Body
   XPI.SetBounds(0, N);
   YPI.SetBounds(0, N);
   for I:=1 to N do
   begin
       XPI[I] := XPO[I];
       YPI[I] := YPO[I];
   end;
   XPI[0] := XPI[N];
   YPI[0] := YPI[N];
   i := 0;
   Result := False;
   repeat
       if  not ((y>YPI[i]) xor (y<=YPI[i+1])) then
       begin
           if x-XPI[i]<(y-YPI[i])*(XPI[i+1]-XPI[i])/(YPI[i+1]-YPI[i]) then
           begin
               Result :=  not Result;
           end;
       end;
       i := i+1;
   until  not (i<=n-1);

   //Finalizers
__Finalizing:
   XPI.Destroy;
   YPI.Destroy;
end;



Страницы: 1 вся ветка

Текущий архив: 2004.05.23;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.038 c
11-1071331854
Vladimir Kladov
2003-12-13 19:10
2004.05.23
{$IFDEF } в секции finalizationn


14-1083085696
Piter
2004-04-27 21:08
2004.05.23
Передача "Розыгрыш"


14-1083692176
Marina_S
2004-05-04 21:36
2004.05.23
Как просмотреть графический файл побайтно?


3-1083152021
КоммофОнСамый
2004-04-28 15:33
2004.05.23
помогите Найти пример к Employee.gdb


3-1082967375
Kirill
2004-04-26 12:16
2004.05.23
Как сформировать VIEW