Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Непонятная особенность в работе кода


Автор: Angakok 19.4.2007, 19:56
Имеется эллипс(круг), который ограничен прямоугольником EllipseRect. Требуется заполнить множество S точками, которые принадлежат этому кругу(лежат внутри). Для этого использую следующий код:
Код


  TMyPoint = class
  public
    x: Integer;
    y: Integer;
    constructor Create(tX: Integer; tY: Integer);
  end;
  ...
  constructor TMyPoint.Create(tX: Integer; tY: Integer); 
  begin
    x := tX;  y := tY;
  end;
  ...

  S: DSet;
  EllipseRect: TRect;
  j,k: Integer;
  Rgn: HRGN;
  ...

  Rgn := CreateEllipticRgnIndirect(EllipseRect);
  if Rgn <> 0 then 
    try
      for j := EllipseRect.Top to EllipseRect.Bottom do
        for k := EllipseRect.Left to EllipseRect.Right do
          if PtInRegion(Rgn,j,k) then 
                S.add([TMyPoint.Create(j,k)]);  

    finally
      DeleteObject(Rgn);
    end;
    


Данный код работает верно, только тогда, когда EllipseRect.Top=EllipseRect.Left. 
В чем прикол ???

Автор: Yanis 19.4.2007, 20:31
Странный класс... Тогда бы уж ему метод прикрутил првоеряющий, попадает он в прямоугольник или нет.
А PtInRect для EllipseRect работает верно? Когда добьёшься этого, тогда и с PtInRegion будет работать.

Автор: sergejzr 19.4.2007, 20:35
Модератор: Название темы должно отражать ее суть!

Автор: Angakok 20.4.2007, 13:10
Цитата(Yanis @ 19.4.2007,  20:31)
Странный класс... Тогда бы уж ему метод прикрутил првоеряющий, попадает он в прямоугольник или нет.
А PtInRect для EllipseRect работает верно? Когда добьёшься этого, тогда и с PtInRegion будет работать.

Все, проблема решена !!!! 
Надо просто поменять месами j,k в цикле. Это же ведь координаты, глаз замылился, не мог увидеть эту ошибку )))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)