Всех с Новым годом!
Проблема следующая: иногда локальная переменная процедуры или функции прямой цикла начинает выдавать значения в обратном порядке. Сталкивался с таким несколько раз, причины найти не смог.
В самих процедурах/функциях нет ничего особенного.
Например:
Код:
function SearchNearPoint(x_,y_,frame_: integer): integer;
var i_,p1x_,p2x_,p3x_,p1y_,p2y_,p3y_: integer;
flag_: boolean;
begin
Result := -1;
flag_ := false;
if (frame_ = 1) then begin
for i_ := 0 to High(ATriangle1) do begin
flag_ := CheckPointInsideTriangle2(APoint1[ATriangle1[i_].p1].x, APoint1[ATriangle1[i_].p1].y,
APoint1[ATriangle1[i_].p2].x, APoint1[ATriangle1[i_].p2].y,
APoint1[ATriangle1[i_].p3].x, APoint1[ATriangle1[i_].p3].y,
x_,y_);
end;
end;
.....
end;
Подобного рода процедур у меня много и чаще всего все в порядке - переменная цикла
i_ идет от 0 до до High(массив). Но иногда отсчет по непонятной причине идет в обратную сторону от максимального индекса до 0, как если бы это был
for i_ := High(массив) downto 0 do begin.
Если, например, в примере выше поменять переменную i_ на любую другую переменную, то проблема останется.
Код:
Но если сделать вот так:
for z_ := 0 to High(ATriangle1) do begin
i_ := z_;
flag_ := CheckPointInsideTriangle2(APoint1[ATriangle1[i_].p1].x, APoint1[ATriangle1[i_].p1].y,
APoint1[ATriangle1[i_].p2].x, APoint1[ATriangle1[i_].p2].y,
APoint1[ATriangle1[i_].p3].x, APoint1[ATriangle1[i_].p3].y,
x_,y_);
end;
Админ: Пользуемся тегами при оформлении кода!
то все работает как надо.
Кто с таким сталкивался? В чем может быть проблема?