Вниз
Скачать: CL | DM;

Определить, является ли многоугольник выпуклым?   Найти похожие ветки 

 
IPranker ©   (2011-01-16 21:17) [0]

Алгоритм нашёл тут:
http://algolist.manual.ru/maths/geom/polygon/convex_or.php

Перевёл так:

Function IsConvexPolygon(const Pts: array of TPoint): boolean;
Var
 i, Num: LongWord;
 p1, p2: LongWord;

 z   : LongInt;
 Flag: LongInt;
begin
 Num:= (High(Pts) + 1);
 If (Num < 4) then
 begin
   Result:= False;
   Exit;
 end;

 Flag:= 0;
 For i:= 0 to Num - 1 do
 begin
   p1:= (i + 1) mod Num;
   p2:= (i + 2) mod Num;
   z:=     (Pts[p1].X - Pts[i].X) * (Pts[p2].Y - Pts[p1].Y);
   z:= z - (Pts[p1].Y - Pts[i].Y) * (Pts[p2].X - Pts[p1].X);

   If (z < 0) then Flag:= Flag or 1
   else
     If (z > 0) then Flag:= Flag or 2
     else
       If (Flag = 3) then
       begin
         Result:= True;
         Exit;
       end;
 end;

 Result:= (Flag <> 0);
End;



Но не пашет. Почему?


 
Palladin ©   (2011-01-16 21:40) [1]

он пашет только с 1 до 10 числа, кроме четвергов, каждого четного месяца по календарю викингов


 
IPranker ©   (2011-01-16 21:43) [2]

Удалено модератором


 
Palladin ©   (2011-01-16 21:49) [3]

Удалено модератором


 
IPranker ©   (2011-01-16 21:49) [4]

Подправил:


Function IsConvexPolygon(const Pts: array of TPoint): boolean;
Var
 i, Num: LongWord;
 p1, p2: LongWord;

 z   : LongInt;
 Flag: LongInt;
begin
 Num:= (High(Pts) + 1);
 If (Num < 4) then      // Треугольники и проч.
 begin
   Result:= (Num = 3);
   Exit;
 end;

 Flag:= 0;
 For i:= 0 to Num - 1 do
 begin
   p1:= (i + 1) mod Num;
   p2:= (i + 2) mod Num;
   z:=     (Pts[p1].X - Pts[i].X) * (Pts[p2].Y - Pts[p1].Y);
   z:= z - (Pts[p1].Y - Pts[i].Y) * (Pts[p2].X - Pts[p1].X);

   If (z < 0) then Flag:= Flag or 1
   else
     If (z > 0) then Flag:= Flag or 2;

   If (Flag = 3) then
   begin
     Result:= True;
     Exit;
   end;
 end;

 Result:= (Flag <> 0);
End;




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

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.005 c
15-1293917399
Юрий
2011-01-02 00:29
2011.04.17
С днем рождения ! 2 января 2011 воскресенье


2-1294441804
Студент
2011-01-08 02:10
2011.04.17
Как открыть своё окно как бы "модальным" поверх чужого?


8-1211723746
S@7
2008-05-25 17:55
2011.04.17
циклично проигрывать музыку


15-1293447297
GanibalLector
2010-12-27 13:54
2011.04.17
Распознавания рукописных символов (FlexiCapture + Delphi)


15-1294238628
@!!ex
2011-01-05 17:43
2011.04.17
Синхронизация файлов




   Наверх