Vererbung Polygon erweitern ?

ioannis_m

Mitglied
Liebe Leute,



Ich bemühe mich gerade, aus einem Set von Punkten auf der Ebene, die Delaunay Triangulierung zu erstellen. Alle Punkte werden unsortiert nacheinander abgearbeitet, das bedeutet, es wird das Dreieck auf der bestehenden Triangulierung gesucht, wo der neue Punkt hingehört. Für so was, kann ich mich die Methode polygon.contains() vorstellen. Problem dabei sind die drei äußeren Dreiecke, die auf zwei mit bestimmten Eigenschaften, fiktiven Punkten bestehen (die sind ganz weit weg usw…) . Ich will die polygon.contains() so erweitern, dass sie zwischen Dreieck mit oder ohne fiktive Punkte nicht unterscheidet.

upload_2018-1-12_19-18-26.png

Das bedeutet die Klasse Polygon ist spezieller und soll meine neue Superpolygon Klasse erweitern (und nicht von ihr erben). Wie geht das (am elegantesten?), so dass ich den bestehenden contains() code benutzen kann?



Danke & Gruß

ioannis
 
Meines Errachtens wäre ein SuperDreieck (aus normalen und fiktiven Punkten) immer generischer als ein Polygon/Dreieck und somit höher in der Hierarchie, und nicht anders um. Vielleicht kann man was mit Komposition basteln, richtig sauber wäre das aber nicht, oder sehe ich da was falsch?
 
Meines Errachtens wäre ein SuperDreieck (aus normalen und fiktiven Punkten) immer generischer als ein Polygon/Dreieck und somit höher in der Hierarchie, und nicht anders um.
Ändert nichts an dem Fehlendem Unterschied zwischen erweitern und erben 😛

Dann wäre jedes Polygon/Dreieck auch ein SuperPolygon/Dreieck? Das klingt zumindest merkwürdig...

Vielleicht kann man was mit Komposition basteln, richtig sauber wäre das aber nicht, oder sehe ich da was falsch?
In den meisten Fällen ist Komposition sauberer...

Mir ist allerdings noch nicht klar, warum zwei verschiedene Klassen nötig sind?
 
Die bestehende contains() Methode setzt ein Dreieck aus drei Punkten voraus, die drei klar definierten Seiten werden durchlaufen und wenn der Punkt immer nach rechts liegt, dann liefert sie true. Damit aber auch eine Aussage getroffen werden kann, wenn der neue Punkt (s. Skizze) oben links oder unten rechts liegt, brauche ich eine neue contains(), die auch ein SuperDreieck ohne klar definierten Seiten (die Punkte P-1 und P-2 haben keine Koordinaten), durchlaufen kann...
 

Zurück
Oben