![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Является ли многоугольник выпуклым? [D7, WinXP]
IPranker © (2011-01-16 21:55:00)Алгоритм нашёл тут:
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:= (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;
Но работает неверно. Почему?
P.S. Модеры, почему закрыли мои прошлую ветку?
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1295201878&n=18
На каких таких основаниях называете меня быдлокодером?
P.S.S. Если и эту ветку закроете, то слив вам защитан, "мастера".
DiamondShark (2011-01-16 22:34:00) [1]И эту закроют, за понты и обсуждение модерирования.
> Но работает неверно. Почему?
Очевидно же: ошибка в программе.
Назвали правильно. Как ещё назвать того, кто копипастит код, но не способен самостоятельно разобраться в алгоритме из двадцати строк, половина из которых декларации, инициализации и предусловия.