Форум: "Основная";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизЯвляется ли многоугольник выпуклым? Найти похожие ветки
← →
IPranker © (2011-01-16 21:55) [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:= (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://delphimaster.net/view/2-1295201878/
На каких таких основаниях называете меня быдлокодером?
P.S.S. Если и эту ветку закроете, то слив вам защитан, "мастера".
← →
DiamondShark © (2011-01-16 22:34) [1]И эту закроют, за понты и обсуждение модерирования.
> Но работает неверно. Почему?
Очевидно же: ошибка в программе.
Назвали правильно. Как ещё назвать того, кто копипастит код, но не способен самостоятельно разобраться в алгоритме из двадцати строк, половина из которых декларации, инициализации и предусловия.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.061 c