Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Kann erbende Klasse Attribute der vererbenden Klasse anpassen (int -> float)?
Guten Abend!
Ich benötige momentan für ein Projekt eine Klasse zum Verwalten von Polygonen, auf die man verschiedene Transformationen (vor allem Rotationen und Verschiebungen) anwenden muss.
Dafür bietet sich natürlich die bereits bestehende Klasse "Polygon" aus der java.awt.Polygon Bibliothek an.
Leider verwaltet diese die Koordinaten der Polygon-Eckpunkte als int, "meine" Polygone müssten mit floats umgehen können.
Leider war meine Java-Pause jetzt doch etwas zu lang. Gibt es eine Möglichkeit, das einfach zu lösen? Prinzipiell müsste ich mir wohl den Quellcode von java.awt.Polygon ansehen und schauen, ob ich die benötigten Methoden "einfach" auf floats anpassen kann. Nur fürchte ich, dass ich dann ebenfalls die Klasse AffineTransform (die man für die Transformationen benutzt) ebenfalls dahingehend angleichen müsste...
PS: Habe bereits eine passende Klasse gefunden, die ich vermutlich benutzen kann
( http://www.java2s.com/Code/Java/2D-Graphics-GUI/Polygonwithfloatcoordinates.htm )
Da sie existiert, gibt es offenbar keine "leichtere" Lösung, aber sie ist für meine Zwecke wohl gut geeignet... von daher hat sich meine Eingangsfrage größtenteils erübrigt.
Damit der Thread nicht ganz sinnlos war:
Ich bin momentan auf der Suche nach ner Methode, mit der man überprüft, ob sich zwei Polygone (teilweise) überlappen. Leider finde ich in entsprechenden Bibliotheken hauptsächlich Funktionen, wo ein Polygon mit einem Rechteck verglichen wird statt mit einem anderen Polygon. Außerdem sind Berührungen okay, die häufig auftauchende intersect-Methode würde also zu viel "aussortieren".
Fällt jemandem hierzu spontan irgendwas ein?
Jaah... Rechtecke sind einige Polygone, nur soll es ja für alle Polygone machbar sein :/
Vielleicht schau ich mir mal den intersect-Quellcode an... nur glaube ich, dass sie es schon allgemeiner gehalten hätten, wenn es allgemeiner (leicht) möglich wäre. Naja, mal sehn...
Ups, da habe ich deine Frage einfach falsch gelesen, ich war der Meinung, du wölltest nur Rechtecke mit Polygonen vergleichen
Mein naiver Ansatz wäre dann, das Polygon an entsprechenden Stellen in mehrere Rechtecke aufzuteilen und dann intersects mit den Rechtecken aufzurufen.
Danke, das wäre wohl ein Ansatz, jo..
Vorher versuch ich trotzdem noch rauszufinden, ob man nicht einfach immer über benachbarte Polygon-Eckpunkte iterieren kann und dann immer testet, ob die beiden Verbindungslinien sich schneiden.. vielleicht gibts da was einfaches mathematisches mit den Koordinaten.
Naja, du hast in der Polygon-Klasse die Arrays xpoints und ypoints, über die du iterieren kannst und du hast die Methode contains für dein anderes Polygon, die du mit den Punkten füttern kannst, falls du das meinst.
Nunja, aber damit könnte man nur testen, ob ein Eckpunkt des einen Polygons innerhalb des anderen liegt. Theoretisch sind ja auch Überlappungen möglich, wo das nicht der Fall ist.
Naja, hab mal einen Mathematiker-Kumpel gefragt. Ich hatte sowas im Sinn: zb wenn xA1 > xB1, aber xA2 < xB2 (mit A, B die beiden Polygone und 1, 2 zwei Eckpunkte, die verglichen werden), könnte man ja annehmen, dass sich die beiden Geraden irgendwo kreuzen. Aber wie gesagt, ich klär das noch ab, damit das mathematisch lupenrein wird.
Ja, da hast du recht. contains war an der Stelle falsch.
Mit Geraden darfst du es aber nicht machen, da Geraden, sofern sie nicht parallel verlaufen, immer einen Schnittpunkt in R² haben, du musst schon bei Strecken bleiben. Ich gehe mal davon aus, dass du das gemeint hast.