Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Abschlusstest Info (https://www.delphipraxis.net/85038-abschlusstest-info.html)

po2407 25. Jan 2007 06:48


Abschlusstest Info
 
Hallo!
Ich muss für Delphi (Version 6) ein Programm schreiben indem ich ein Polygon zeichnen muss und danach ein Punkt. Mit einem betätigen eines Button muss dann angezeigt werden ob der Punkt innerhalb oder ausserhalb liegt. Das Polygon und denn Punkt zu zeichnen war einfach aber rauszufinden ob der Punkt innerhalb des Polygons liegt oder nicht ist leider zu schwierig für mich, könnt ihr mir helfen?
Ich weiß das es mit der Kreuzungsmethode geht, mehr aber nicht. D.h. von meinem Punkt aus zeichne ich einen imaginäre Linie die wahrscheinlich meine Polygonkanten kreuzt. Je nach Anzahl der Kreuzungen liegt der Punkt dann innerhalb oder ausserhalb. Wenn möglich bringt mir die Lösung gleich in Delhisprache. Thx.

[edit=SirThornberry]Programmiersprache geändert - Mfg, SirThornberry[/edit]

mkinzler 25. Jan 2007 06:55

Re: Abschlusstest Info
 
Bei Google suchenpunkt in polygon
BTW seit wann kann D6 .Net?

dr. love 25. Jan 2007 10:22

Re: Abschlusstest Info
 
Tja... da gibts mehrere Möglichkeiten, eine mathematisch korrekte, allerdings etwas aufwändigere, eine speicheraufwändige und eine, mit der man schnell zur Lösung kommt, allerdings als Schummler dargestellt werden könnte ;-) Zunächst einmal bräucht ichn paar Infos:

1. Der Punkt - is das nurn Pixel?
2. Das Polygon - is das gefüllt oder lediglich ne Kontur?
3. Worein hast du das gezeichnet? Ins Formular, in eine Imagekomponente oder ein Zeichenfeld (Draw)?

Wenn du mir das beantwortet hast bastel ich dir ne Lösung!

Greetings,

DER DOC

Luckie 25. Jan 2007 11:17

Re: Abschlusstest Info
 
am einfachsten geht es wohl mit der GDI-Funktion MSDN-Library durchsuchenPtInRegion. Aber ich hege den Verdacht, ihr sollt einen Algorithmus dafür implementieren.

dr. love 25. Jan 2007 16:58

Re: Abschlusstest Info
 
glaube nicht, dass der lehrer das gern sieht. die idee is gut, aber für ne prüfung darf man wahrscheinlich eh nur die zur verfügung stehenden komponenten nutzen

jakobwenzel 25. Jan 2007 17:45

Re: Abschlusstest Info
 
Wenn das Polygon gefüllt ist: Einfach vor dem Zeichnen des Punktes gucken, welche Farbe an der Stelle vorher is. :wink:
Dürfte auch die Perfomance-Technisch beste möglichkeit sein :mrgreen:

dr. love 26. Jan 2007 08:38

Re: Abschlusstest Info
 
Hätte ich auch gesagt, aber ich denk mal das is eher geschummelt als das Problem wirklich gelöst. Sicher brauchts einen mathematischen Lösungsweg, aber po... schreibt ja nich zurück, wie ers gern hätte ;-)

Sidorion 26. Jan 2007 09:34

Re: Abschlusstest Info
 
Null Problem: Du fällst ein Lot vom Punkt auf die X-Achse. Jetzt prüfst Du, mit wievielen Seiten des Polygons sich die Strecke vom Punkt bis zum Lotfuß schneidet. Ist diese Anzahl ungerade, liegt der Punkt im Polygon.

Optimierungen:
- zunächst die Ecken des Polys mit dem Punkt vergleichen. Ist eine Eche gleich, liegt er auf dem Rand.
- nur die Seiten Testen, deren Anfang und Ende auf gegenüberliegenden Seiten des Punktes liegen.
- nur die Seiten Testen, die mindestens einen Punkt (Anfang oder Ende) unterhalb des Punktes haben.
- zunächst nur die Geraden schneiden (also keine Prüfung, ob der Schnittpunkt auf beiden Strecken liegt). gibt es unendlich viele Schnittpunkte, liegt der Punkt auf der Kante.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:19 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