punkty wewnątrz polygon

0

Proszę o pomoc w wymyśleniu rozwiązania.
Mam tablicę współrzędnych pikseli PaintBox'a i polygon i muszę określić, które punkty znajdują się wewnątrz, a które na zewnątrz.
Nie mam pojęcia jak to zapisać w Delphi.

(Chciałem się posłużyć tym, że jeżeli linia pozioma poprowadzona od punktu do końca PaintBox1.Width ma parzystą liczbę przecięć z polygonem, to punkt jest wewnątrz > Nie wiam jak to zastosować w delphi dla tablicy współrzędnych).

Z góry dzięki za pomoc

0

Szukałeś w google?
http://blog.vokiel.com/klasa-php-rozwiazujaca-problem-przynaleznosci-punktu-do-wielokata/

A taki prymitywny sposób?
Rysujesz polygon na canvasie stosując znany Pen.Color i Brush.Color. Następnie sprawdzasz kolor wybranego punktu.

0

Ja korzystam z takiego kodu:

 Type TMPoint = Record
                 X, Y: Single;
                End;

Function isPointInPolygon(TestX, TestY: Single; Points: Array of TMPoint): Boolean;
Var I, J: Integer;
Begin
 Result := False;
 J      := High(Points);

 For I := Low(Points) To High(Points) Do
 Begin
  if (((Points[I].Y < TestY) and (Points[J].Y >= TestY) or
       (Points[J].Y < TestY) and (Points[I].Y >= TestY)) and
       ((Points[I].X <= TestX) or (Points[J].X <= TestX))) Then
   if (Points[I].X+(TestY-Points[I].Y)/(Points[J].Y-Points[I].Y)*(Points[J].X-Points[I].X) < TestX) Then
    Result := not Result;
  J := I;
 End;
End;

(oczywiście jeżeli masz dużo punktów/figur, najlepiej dodać jest jeszcze proste sprawdzanie AABB, coby tej funkcji nie wywoływać niepotrzebnie miliard razy).

1 użytkowników online, w tym zalogowanych: 0, gości: 1