Intersect

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Intersect

Сообщение Seemmyy » 27.05.2012 19:51:45

Подскажите функцию пересечения обьектов.
В PascalABC эта функция была intersect.
ob1.intersect(ob2) (boolean).
Seemmyy
незнакомец
 
Сообщения: 4
Зарегистрирован: 27.05.2012 19:48:42

Re: Intersect

Сообщение sign » 28.05.2012 06:09:20

Про наличие таковой функции в лазарусе не знаю, но вы можете воспользоваться функцией из делфи.
Там в модуле Types много разного и полезного.
Код: Выделить всё
function IntersectRect(out Rect: TRect; const R1, R2: TRect): Boolean;
begin
  Rect := R1;
  if R2.Left > R1.Left then Rect.Left := R2.Left;
  if R2.Top > R1.Top then Rect.Top := R2.Top;
  if R2.Right < R1.Right then Rect.Right := R2.Right;
  if R2.Bottom < R1.Bottom then Rect.Bottom := R2.Bottom;
  Result := not IsRectEmpty(Rect);
  if not Result then FillChar(Rect, SizeOf(Rect), 0);
end;
function IsRectEmpty(const Rect: TRect): Boolean;
begin
  Result := (Rect.Right <= Rect.Left) or (Rect.Bottom <= Rect.Top);
end;
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Intersect

Сообщение Seemmyy » 28.05.2012 21:19:03

эта не подходит. мне нужна функция для проверки пересечения между обьектами (картинками прямоугольной формы)
нигде не нашёл, сам написал. если кому понадобится
Код: Выделить всё
function Intersect(R1:TImage ; R2:TImage): Boolean;
var x,y,kx,ky,a,b,ka,kb:integer;
begin
   x:=r1.Width;
   y:=r1.height;
   kx:=r1.Left;
   ky:=r1.Top;
   a:=r2.Width;
   b:=r2.Height;
   ka:=r2.Left;
   kb:=r2.top;

   intersect:=false;
   if (ka>=kx-a)and(ka<=kx+x)and(kb>=ky-b)and(kb<=ky+y) then intersect:=true;
end; 
Seemmyy
незнакомец
 
Сообщения: 4
Зарегистрирован: 27.05.2012 19:48:42


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 252

Рейтинг@Mail.ru