AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fläche - liegt der Punkt P(x,y) darin?

Ein Thema von simlei · begonnen am 12. Mai 2006 · letzter Beitrag vom 13. Mai 2006
Antwort Antwort
simlei

Registriert seit: 23. Nov 2005
119 Beiträge
 
Delphi 7 Professional
 
#1

Fläche - liegt der Punkt P(x,y) darin?

  Alt 12. Mai 2006, 22:39
Hallo!
Ich suche eine Funktion (ideal wärs natürlich die existiert schon), mit welcher ich überprüfe, ob ein Punkt mit den Koordinaten x_p und y_p in einem Polygon liegt, welches durch seine Eckpunkte (sind in der richtigen Reihenfolge angegeben) definiert ist (also im Prinzip ist das Polygon derart definiert, dass ich es mit TCanvas.Polygon(arrayvonpunkten:TPoints) zeichnen könnte.
Nun habe ich schon viel versucht; durch ausprobieren (Polygon zeichnen und gucken, ob an der Position x_p, y_p ein schwarzer Punkt = Punkt des Polygons ist, geht nicht, da ja auf die Pixel gerundet wird und man nicht überprüfen kann ob sich an Picture.Pixels[x_p, y_p] ein Punkt des Polygons ist, da ja x_p und y_p real-variablen sind.
Also insgesamt eine Funktion, die idealerweise das Array von Punkten und die Koordinaten x_p und y_p hat und true oder false zurückliefert.

Für Antworten bin ich sehr dankbar!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Fläche - liegt der Punkt P(x,y) darin?

  Alt 12. Mai 2006, 23:01
Wenn ein Punkt innerhalb einer begrenzen Fläche liegt, dann hat eine Gerade, die von dem Punkt ausgeht, ein eungerade Anzahl von Schnittpunken mit der Begrenzungslinie der Fläche. Liegt der Punkt ausserhalb, ist die Anzahl der Schnittpunkte 0 oder gerade. (Ich meine, das hätte ich mal so gelesen.)
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Fläche - liegt der Punkt P(x,y) darin?

  Alt 12. Mai 2006, 23:25
Hallo,

eine sehr einfache Lösung könnte die Nutzung des Windows-API sein (ungetestet!):

Delphi-Quellcode:
function PtInPoly (const aPoly: array of TPoint; x, y: Integer): Boolean;
  var lRgn: HRGN;
begin
  lRgn := CreatePolygonRgn(aPoly, Length(aPoly), WINDING);
  Result := PtInRegion(lRgn, x, y);
  DeleteObject(lRgn);
end;
Die Funktion CreatePolygonRgn soll allerdings bei einer großen Anzahl von Punkten ziemlich langsam sein. In diesem Fall wirst du auf andere Algorithmen zurückgreifen müssen.

Gruß Hawkeye
  Mit Zitat antworten Zitat
simlei

Registriert seit: 23. Nov 2005
119 Beiträge
 
Delphi 7 Professional
 
#4

Re: Fläche - liegt der Punkt P(x,y) darin?

  Alt 13. Mai 2006, 14:30
@ Luckie: Danke! Das ist natürlich mathematisch sehr elegant und einfach nachzuweisen; das zu programmieren ist dann sicher leicht .

und @ Hawkeye: was leistet die Funktion CreatePolygonRgn und was ist der Typ HRGN? ein Datentyp, der Flächen oder Regionen beschreibt?
Jedenfalls: Vielen Dank, da es zu klappen scheint (2 Tests liefen i.o.)
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Fläche - liegt der Punkt P(x,y) darin?

  Alt 13. Mai 2006, 14:37
Je nachdem für was du es brauchst, solltest du aber auch die Spezialfälle untersuchen:
Luckies Ansatz sagt, dass ein Punkt auf einer Linie im Polygon ist, ein Punkt auf einer Ecke aber nicht.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Fläche - liegt der Punkt P(x,y) darin?

  Alt 13. Mai 2006, 16:04
@simlei
Zitat von Win32 Programmer's Reference:
In Microsoft Windows, a region is a rectangle, polygon, or ellipse (or a combination of two or more of these shapes) that can be filled, painted, inverted, framed, and used to perform hit testing (testing for the cursor location).
Am besten schaust du dir das Kapitel "Regions" in der Datei Win32.hlp an. Diese Hilfedatei liegt normalerweise im Verzeichnis "C:\Programme\Gemeinsame Dateien\Borland Shared\MS Help". Es ist zu viel Text, um ihn hier komplett zu posten.

Gruß Hawkeye
  Mit Zitat antworten Zitat
simlei

Registriert seit: 23. Nov 2005
119 Beiträge
 
Delphi 7 Professional
 
#7

Re: Fläche - liegt der Punkt P(x,y) darin?

  Alt 13. Mai 2006, 19:07
... and used to perform hit testing ...

ok alles klar - das ist ja genau das was ich suchte.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz