Показать сообщение отдельно
  #2  
Старый 13.06.2022, 07:30
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

прблема на линиях 44-53.
Как я понимаю, теюе надо сначала проверить ВСЕ отрезки на пересечение, а только потом принять решение о том, добавлять ли новый отрезок в список (массив) или нет. А тут у тебя полный бардак.
Я бы написал как-то так:
Код:
var
  b : Boolean;
...
  b := false;
  for i := Low(arect1) to High(arect1) do
  begin
    b := CollisionLineFromTRECT(arec1[i], buf_Rect);
    if b then break;
  end;
  if not b then
  begin
      Inc(k);
      SetLength(arec1, k);
      arec1[k - 1] := buf_Rect;
  end;
Т.е. вводим флаг. Инициализируем его значением false.
Теперь бежим по всем сохраненным отрезкам и проверяем их на пересечение с текущим сгенерированным. Если пересечение есть, то флаг становаится true и мы прерываем цикл проверки.
После проверки, если флаг не поменял своего значения (т.е. он равен false), то добавляем новый отрезок в массив.
Ответить с цитированием