Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Außenkontur erkennen (https://www.delphipraxis.net/164964-aussenkontur-erkennen.html)

MechMac666 7. Dez 2011 20:25

Außenkontur erkennen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich habe ein Array of Pointlist. Jede Pointlist beinhaltet die Koordinaten für z.B. eine Polylinie.

Das Ganze könnte z.B. so aussehen:
Anhang 35776

Nun möchte ich gerne die Außenkontur als eine einzelne Polylinie erhalten. Der Hintergrund ist der, das ich dieses "Outline"-Polygon als Region in der GDI verwenden möchte. Dazu dürfen es aber keine einzelnen Linien sein, sondern es muss ein "Objekt" sein.

Nur wie kann ich ermitteln, was zur Außenkontur gehört und was zur Innenkontur? Man bräuchte quasi ein "Im Uhrzeigersinn abfahren und immer links halten" Algo.

Gruß, Andreas

BenjaminH 7. Dez 2011 20:33

AW: Außenkontur erkennen
 
Hi,
du kannst ja für jeden Punkt prüfen, ob er im Polygon, das die restlichen Punkte aufspannen enthalten ist. Wenn ja, dann lässt du den Punkt weg.
Dabei wird dir das helfen:
http://paulbourke.net/geometry/insidepoly/

Viele Grüße,
Benjamin

[Edit]Übersichtlichere Seite gefunden.

MechMac666 7. Dez 2011 21:05

AW: Außenkontur erkennen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hm. Und was wäre mit der Rot markierten Linie? Deren beiden Punkte liegen exakt auf Punkten der sich darüber und darunter befindlichen Linien.
Anhang 35779


Gruß, Andreas

Uwe Raabe 7. Dez 2011 21:16

AW: Außenkontur erkennen
 
In diesem Fall empfehle ich eine passende Aneinanderreihung der Funktionen CreatePolyPolygonRgn und CombineRgn.

jfheins 8. Dez 2011 07:40

AW: Außenkontur erkennen
 
Du suchst die konvexe Hülle der Punkte. Algorithmen gibt's auf Wikipedia: http://de.wikipedia.org/wiki/Konvexe_Hülle

wobei... die Hülle ist dann konvex, in deinem Beispiel hat sie also zwei schräge linien... stört das?

Uwe Raabe 8. Dez 2011 08:15

AW: Außenkontur erkennen
 
Zitat:

Zitat von jfheins (Beitrag 1140210)
Du suchst die konvexe Hülle der Punkte. Algorithmen gibt's auf Wikipedia: http://de.wikipedia.org/wiki/Konvexe_Hülle

wobei... die Hülle ist dann konvex, in deinem Beispiel hat sie also zwei schräge linien... stört das?

Wobei "Im Uhrzeigersinn abfahren und immer links halten" aber etwas anderes ergeben würde.

Medium 8. Dez 2011 08:51

AW: Außenkontur erkennen
 
Man könnte so Dinge tun, wie prüfen, ob die 2 Kanten an einem Punkt jeweils auf der einen Seite innerhalb, auf der anderen ausserhalb eines Polygons darstellen, was aber bei manch engen Situationen eher mäh sein kann (Point-In-Poly Prüfung von Punkten knapp neben den Kanten in Normalenrichtung - ist der Offset zu groß, kann man Lücken übersehen, ist er zu klein, haut einem die Genauigkeit vors Knie).
Das praktikabelste wird hier wirklich Uwes Lösung sein. Alternativ kannst du deine Polys auch einfarbig auf ein Bitmap zeichnen, und mit diesem als Maske eine Region erzeugen, was aber so ziemlich das gleiche sein dürfte, wie das was Windows mit Uwes Weg intern eh täte :)


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