Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.04.17;
Скачать: 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 вся ветка

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

Наверх




Память: 0.47 MB
Время: 0.014 c
2-1295205120
v_a_belousov
2011-01-16 22:12
2011.04.17
Перемещение объектов по дробной координате


4-1239082807
Игорь404
2009-04-07 09:40
2011.04.17
Альтернатива SendMessage


1-1246595056
Vitaliy_____
2009-07-03 08:24
2011.04.17
Организация многопоточности


15-1293587663
TUser
2010-12-29 04:54
2011.04.17
Чтобы только мышкой тыкать


2-1295100435
volkafff
2011-01-15 17:07
2011.04.17
Вопросы новичка про цикл и неповторяющиеся числа в массиве.