punkty wewnątrz polygon

punkty wewnątrz polygon
  • Rejestracja: dni
  • Ostatnio: dni
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

pelsta
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 819
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.

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

Ja korzystam z takiego kodu:

Kopiuj
 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).

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.