Mathe - Punkt in Koordinatensystem
-
Hallo zusammen,
also ich habe eine Figur auf dem Bildschirm. Sagen wir mal ein Sechseck!
Die Bildschirmkoordinaten der Eckpunkte liegen vor.
Mittels einer Polygon Funktion (automatisch in meinem Borland Compiler drin) kann ich auch die Punkte verbinden.
Nun habe ich einen beliebigen Punkt auf dem Bildschirm.
Zeichne ich ihn, ist (für das Auge) schnell klar, ob er sich innerhalb des Sechsecks befindet.
Aber ich muss das mathematisch nachweisen.
Wie kann ich so was machen. Meine Mathekenntnisse liegen schon weit zurück.
Es gibt zwar eine Formel aus Mathe um abzuprüfen, ob Punkte auf einer Ebene liegen, aber auf der "Ebene" liegt der Punkt klar (zweidimensional). Aber liegt er innerhalb meiner Figur????
Danke!Gruß
*Riese*
-
Weiß keiner Rat?
Vielleicht gibt es auch in der Entwicklungsumgebung eine Funktion die so etwas prüfen kann?
Benutze den Borland C++ Builder.Gruß
*Riese*
-
das einfachste wäre, du überlegst dir, wie du prüfst, ob ein Punkt links oder rechts einer Geraden liegt. Dann testest du damit den Punkt gegen alle 6 begrenzenden Kanten. Keine Ahnung ob das besonders effizient ist, aber was besseres will mir nicht einfallen.
-
Danke!
Das mit der gerade könnte funktionieren.
Vielleicht weiß jemand aber noch einen effizienteren Weg?!
Gruß
*Riese*
-
Um z. B. zu entscheiden, ob ein Punkt innerhalb eines Polygons liegt, betrachtet man die Summe der Winkel zwischen dem zu untersuchenden Punkt und allen Eckpunkten des Polygons.
Ist die Winkelsumme Null, so liegt der Punkt außerhalb des Polygons.
Bei überschneidungsfreien Polygonen beträgt die Winkelsumme für einen inneren Punkt 360°; bei sich überschneidenden Polygonen (wie etwa das Pentagramm) haben Punkte auf der Überschneidungsfläche ein Vielfaches davon.
Algorithmus zum zeichnen eines Polygons (2D)?
-
Danke Krösus!
Das ist die Lösung.
Vor allem die Ansätze unter http://www.geometryalgorithms.com/Archive/algorithm_0103/algorithm_0103.htm
sind interessant!Gruß
*Riese*
-
Ich meine das es unter Visual C++ eine entsprechende Funktion gibt, die überprüft ob sich eine Punkt innerhalb eines Polygon befindet... Bin mir nicht mehr ganz sicher aber ich habe das Teil auch schon mal benutzt.
CRgn::PtInRegion
-
Original erstellt von <Andreas>:
**Ich meine das es unter Visual C++ eine entsprechende Funktion gibt, die überprüft ob sich eine Punkt innerhalb eines Polygon befindet... Bin mir nicht mehr ganz sicher aber ich habe das Teil auch schon mal benutzt.CRgn::PtInRegion**
Ja, man kann eine Region erstellen per CreatePolygonRgn() und dann per PtInRegion() abfragen, ob der Punkt darin liegt.