Главная страница
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.01 c
15-1293566787
Сергей М.
2010-12-28 23:06
2011.04.17
Непонятка с принт-сервером DP-101P+


15-1292840260
ocean
2010-12-20 13:17
2011.04.17
К вопросу о нобелевских премиях


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


6-1236688524
maxistent
2009-03-10 15:35
2011.04.17
Передача данных через прокси


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