Punkt finden der in einem Shape liegt..?

sirbender

Top Contributor
Hallo,

ich habe einen Shape (genauer GeneralPath). Dieser hat eventuell auch Bereiche in seinem Inneren die nicht gerendert werden (flapsig ausgedrueckt: Loecher).

Nun suche ich eine Methode wie ich sicher einen Punkt finden kann, der in dem Shape liegt. Es ist egal welcher Punkt. Hauptsache er liegt im Shape. Nun koennte ich zum Beispiel zufaellig Punkte generieren die innerhalb des umschliessenden Rechtecks des Shape liegen und via Shape.contains(Point) tested ob die Punkte darin liegen. Wenn ein Punkt im Shape liegt breche ich ab da ich habe was ich will.

Ich frage mich aber ob es nicht einfacher und direkter geht ohne ausprobieren? Kenne ich direkt Punkte die sicher im Shape liegen?
 

strußi

Top Contributor
wenn die löcher gleich Kreise sind und größer 3Pixel dann kannst du aus jeder ecke einen punkt nach innen gehen und hast damit sofort einen punkt
 

sirbender

Top Contributor
wenn die löcher gleich Kreise sind und größer 3Pixel dann kannst du aus jeder ecke einen punkt nach innen gehen und hast damit sofort einen punkt

Solche Ueberlegungen sind sicher richtig und ich hab sie so aehnlich auch angestellt. Nur nimmst du halt viel an. Zum Beispiel, dass es Loecher gibt. Ich sagte oben "eventuell".
Desweiteren ist auch die Groesse der Loecher von dir eine Annahme. Auch bin ich mir jetzt nicht 100% sicher, was du mit "jeder Ecke" meinst. Ein Shape hat gewoehnlich keine "Ecke" sondern eine Umrandung.
 

strußi

Top Contributor
ok, mein verständnisfehler. Kannst du über die Shapeform nicht ableiten ob ein Punkt innerhalb des Shapes liegt

Wenn du in einem x/y Koordinatensystem denkst und das Shape reinlegst?
z.b. Jedes Shape hat ymax, ymin, xmax und xmin, daraus kannst du dann den mittelpunkt errechnen, der sollte auf jeden fall im Shape liegen,
 

Tobse

Top Contributor
Ich denke, dass es mathematisch unmglich ist, in einer Beliebigen form mit beliebig großen und beliebig-förmigen "Löchern" deterministisch und explizit einen solchen Punkt zu erreichen; demnach halte ich den probabilistischen Ansatz für am sinnvollsten.

Den kannst du aber optimieren. Anstadt einfach einen Punkt aus dem Umschließenden Rechteck zu wählen, kannst du z.B. n Punkte auf der "Umrandung" wählen, eine Gerade zwischen ihnen aufstellen und auf diesen Geraden 3-4 Punkte ausprobieren.

EDIT:
Wenn du in einem x/y Koordinatensystem denkst und das Shape reinlegst?
z.b. Jedes Shape hat ymax, ymin, xmax und xmin, daraus kannst du dann den mittelpunkt errechnen, der sollte auf jeden fall im Shape liegen,
Nein, das muss er nicht, ein solches "Loch" kann ja auch dort liegen. Aber auch der Mittelpunkt des umschließenden Rechtecks ist sehr wahrscheinlich drin, den also auch austesten.
 
Zuletzt bearbeitet:

Dumdidum

Mitglied
Eine andere Möglichkeit wäre z.B. auch:

1.) Berechne das Umschließende Rechteck
2.) Wähle hieraus 2 Punkte auf unterschiedlichen Seiten (also z.B. Mittelpunkt der oberen Rechtecklinie und Mittelpunkt der unteren Rechtecklinie, oder z.B. (0,0) und (1,1) also 2 Ecken)
3.) Es entsteht also eine Linie zwischen den 2 Punkten auf denen es Punkte geben MUSS (wenn es sich nicht auch um mehrere nicht miteinander verbundene Shapes handeln kann)
4.) Nun sollte man möglichst sinnvoll Punkte zum "testen" wählen.
5.) Mein Vorschlag immer letztendlich die Mittelpunkte auf der Linie testen, bei welcher dann bei den Teillinien wieder der Mittelpunkt getestet wird (und eben 1 Ebene nach der anderen).

Die Möglichkeit wäre auf jedenfall eine Verbesserung zum Test gegenüber beliebige Punkte innerhalb des Umschließenden Rechteckes.
 

Tobse

Top Contributor
Eine andere Möglichkeit wäre z.B. auch:

1.) Berechne das Umschließende Rechteck
2.) Wähle hieraus 2 Punkte auf unterschiedlichen Seiten (also z.B. Mittelpunkt der oberen Rechtecklinie und Mittelpunkt der unteren Rechtecklinie, oder z.B. (0,0) und (1,1) also 2 Ecken)
3.) Es entsteht also eine Linie zwischen den 2 Punkten auf denen es Punkte geben MUSS (wenn es sich nicht auch um mehrere nicht miteinander verbundene Shapes handeln kann)
4.) Nun sollte man möglichst sinnvoll Punkte zum "testen" wählen.
5.) Mein Vorschlag immer letztendlich die Mittelpunkte auf der Linie testen, bei welcher dann bei den Teillinien wieder der Mittelpunkt getestet wird (und eben 1 Ebene nach der anderen).

Die Möglichkeit wäre auf jedenfall eine Verbesserung zum Test gegenüber beliebige Punkte innerhalb des Umschließenden Rechteckes.

Da Stimme ich zu. Solange nicht beide Punkte auf der selben Kante des umschließenden Rechtecks liegen sollte dieser Algorithmus in den Meissten Fällen nach spätestens 3-4 Ebenen ein Resultat haben (damit wären 9 bis 16 Punkte getestet, das ist im Rahmen).
 

sirbender

Top Contributor
Ich habe ja auch den PathIterator. Also die Punkte die den Shape definieren. Wenn ich da einfach einen von denen nehme und anfange alle 8 direkt angrenzenden Pixel zu testen ob sie im Shape oder ausserhalb liegen.

Sollte das nicht effizienter sein?
 

Dumdidum

Mitglied
Ich habe ja auch den PathIterator. Also die Punkte die den Shape definieren. Wenn ich da einfach einen von denen nehme und anfange alle 8 direkt angrenzenden Pixel zu testen ob sie im Shape oder ausserhalb liegen.

Sollte das nicht effizienter sein?

Ja das hat zumindest ja einen garantierten worst case von 8 ;) Was dann wirklich schneller ist hängt dann vom shape ab ;)

Ich frage mich ja nur, dass wenn du wirklich auch einfach alle Punkte hast das nicht gleich dann so gemacht hast und zufällige Punkte testen wolltest?
Ich mein letztendlich ist es einfach komplett egal ob du 1 oder 100 punkt testen wirst. Den unterschied wirste ja ned merken.

Darf man fragen warum du überhaupt einen x-beliebigen Punkt innerhalb des shapes brauchst? Ich mein warum tut es dann nicht gleich ein eckpunkt? der liegt ja auch im shape...
 

sirbender

Top Contributor
Ja das hat zumindest ja einen garantierten worst case von 8 ;) Was dann wirklich schneller ist hängt dann vom shape ab ;)

Ich frage mich ja nur, dass wenn du wirklich auch einfach alle Punkte hast das nicht gleich dann so gemacht hast und zufällige Punkte testen wolltest?
Ich mein letztendlich ist es einfach komplett egal ob du 1 oder 100 punkt testen wirst. Den unterschied wirste ja ned merken.

Darf man fragen warum du überhaupt einen x-beliebigen Punkt innerhalb des shapes brauchst? Ich mein warum tut es dann nicht gleich ein eckpunkt? der liegt ja auch im shape...

Was ist denn ein Eckpunkt?

Ich will den Shape fuellen. Der Startpunkt des FloodFill-Algos muss innerhalb des Shape liegen. Und ich will die Suche nach dem Punkt schon effizient machen. Ist ein Performance-Flaschenhals weil ich das sehr oft machen muss.

Muss mal schauen wie billig es ist die Pfadpunkte zu kriegen. Man muss sich ja den PathIterator holen. Glaub der wird erst "gebaut".

Ich haette mich gefreut wenn es eine mathematisch eindeutige Loesung gaebe zu dem Problem. Gibts scheinbar nicht.
 

Dumdidum

Mitglied
Mit "Eckpunkt" meinte ich einen deiner Punkte am Rand des Shapes, die diesen ja definieren.

Aber für einen floodFill algorithmus würde dir ein Eckpunkt natürlich nicht ausreichen.


Allerdings erschließt sich mir nicht ganz, warum du überhaupt ein Floodfill algorithmus benutzt? Und ned einfach auf deinem Graphics Object "fill" aufrufst!? Aber ist sicher ne Übungsaufgabe oder sowas wo ihr eben Floodfill benutzen müsst?!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Punkt von MouseListener hat falsche Koordinate AWT, Swing, JavaFX & SWT 2
P Abwächselnd ein Punkt und ein x anzeigen AWT, Swing, JavaFX & SWT 2
L 2D-Grafik Frage zu Ellipse2D.Double, Abfrage, ob Punkt enthalten ist funktioniert nicht AWT, Swing, JavaFX & SWT 3
J Rectangle g.fillRec() X/Y Punkt AWT, Swing, JavaFX & SWT 5
K 2D-Grafik Punkt in Eclipse AWT, Swing, JavaFX & SWT 4
S Bild von Punkt zu Punkt zeichnen AWT, Swing, JavaFX & SWT 8
B 3D-Grafik Punkt in JAVA3D darstellen AWT, Swing, JavaFX & SWT 2
L Swing struktur und nahester Punkt AWT, Swing, JavaFX & SWT 4
J Punkt-genaue Positionierung von SWT-Komponenten AWT, Swing, JavaFX & SWT 10
T JComboBox Komma in Punkt umwandeln AWT, Swing, JavaFX & SWT 2
S JTable Float Column fuegt automatisch Punkt hinzu wenn man Zahlen eingibt. AWT, Swing, JavaFX & SWT 21
X Punkt auf Geometrie AWT, Swing, JavaFX & SWT 24
G Blinkenden Punkt zeichen AWT, Swing, JavaFX & SWT 2
S Will einen Punkt zeichnen aber krieg das net hin. AWT, Swing, JavaFX & SWT 2
J JScrollPane soll automatisch zu einem punkt scrollen AWT, Swing, JavaFX & SWT 4
G Punkt um ein Rotationszentrum rotieren lassen AWT, Swing, JavaFX & SWT 15
S FAQ und JTable Tutorial.Teil.4 Punkt 5 wichtige Bemerkung AWT, Swing, JavaFX & SWT 2
T drehung um einen anderen punkt AWT, Swing, JavaFX & SWT 2
R Hässlicher Punkt bei JPopupMenu AWT, Swing, JavaFX & SWT 12
E x wert von einem vorhandenen punkt abziehen? AWT, Swing, JavaFX & SWT 3
N javafx Position der Bustaben finden label AWT, Swing, JavaFX & SWT 1
beli3ver JavaFX Anwendung startet nicht, kann den Fehler nicht finden (Exception in Application start method) AWT, Swing, JavaFX & SWT 1
M AWT Kann meinen Fehler beim ActionListener nicht finden AWT, Swing, JavaFX & SWT 5
S JList Index finden AWT, Swing, JavaFX & SWT 6
A AWT TTF-Datei zu Font-Objekt finden? AWT, Swing, JavaFX & SWT 5
R Bild in Bild finden AWT, Swing, JavaFX & SWT 4
propra Schnittpunkt zwischen Objekt und Kante finden AWT, Swing, JavaFX & SWT 24
M GEF tutorial Fehler finden AWT, Swing, JavaFX & SWT 4
A 2D-Grafik Markantesten Bildpunkte finden! AWT, Swing, JavaFX & SWT 8
Rudolf Swing JTree Node anhand vom Namen finden AWT, Swing, JavaFX & SWT 4
L Swing Auslöser eines Events finden? AWT, Swing, JavaFX & SWT 6
M Finden des TOP - Containers AWT, Swing, JavaFX & SWT 8
A wie heisst dies, und wo kann ich es finden? AWT, Swing, JavaFX & SWT 7
B Swing Passendes Layout finden: Welche Klassen muss ich wie anwenden? AWT, Swing, JavaFX & SWT 8
7 SWT-Composite für Wizard, Event finden? AWT, Swing, JavaFX & SWT 5
G Component "finden" AWT, Swing, JavaFX & SWT 6
Juelin Zugriff auf Bildschirmobjekte aus einem anderen Programm AWT, Swing, JavaFX & SWT 6
M Seltsame Exception bei setVisible(true) Methode in einem JFrame AWT, Swing, JavaFX & SWT 2
MartinNeuerlich Kann mir jemand, der einen Mac mit einem m1 oder m2-Chip hat, eine POM geben mit der Javafx-Fullscreen beim Mac mit m-Chip funktioniert? AWT, Swing, JavaFX & SWT 1
W 2 JTables in einem Swing-Fenster? AWT, Swing, JavaFX & SWT 5
J JavaFx PDF in einem Element in einem Fenster anzeigen. AWT, Swing, JavaFX & SWT 11
Mojo7310 Ändern von Text in JLabel mit einem Button AWT, Swing, JavaFX & SWT 11
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
S Swing zu einem Datum Tage addieren/subtrahieren AWT, Swing, JavaFX & SWT 6
E Swing Mausposition auf einem JFrame erkennen AWT, Swing, JavaFX & SWT 5
Jose05 NullPointerException bei Beschreiben eines Labels aus einem Array AWT, Swing, JavaFX & SWT 12
ExceptionOfExpectation Textdarstellung auf einem Canvas mit Hilfe von repaint(); AWT, Swing, JavaFX & SWT 6
2 JavaFX die ChoiceBox leitet den String nicht weiter oder es komm zu einem NullPointer AWT, Swing, JavaFX & SWT 8
L JavaFX javafx.fxml.LoadException bei einem Taschenrechner AWT, Swing, JavaFX & SWT 5
Z GUI Forms - Mehrere Fenster in einem Projekt AWT, Swing, JavaFX & SWT 18
N Nur bei einem Textfiled Nullpointerexception bei getText() AWT, Swing, JavaFX & SWT 1
H JComobox in einem JPopupNeu AWT, Swing, JavaFX & SWT 7
P Button simpler random auf einem JPanel verteilen? AWT, Swing, JavaFX & SWT 3
W Inject bei einem Swing Frontend AWT, Swing, JavaFX & SWT 8
H Daten aus einer XML(x83-Datei) in einem JFrame anzeigen lassen AWT, Swing, JavaFX & SWT 9
Z Swing Drag and Drop mit einem JButton AWT, Swing, JavaFX & SWT 1
Z Mit einem Button einen anderen Button Triggern AWT, Swing, JavaFX & SWT 3
D AWT Wie kann ich ein Frame von einem anderen aus beeinflussen? AWT, Swing, JavaFX & SWT 7
T Setzen von der Schriftgröße bei einem Shell AWT, Swing, JavaFX & SWT 15
A checkbox in einer TableView abhängig von einem anderen Celleninhalt disablen AWT, Swing, JavaFX & SWT 1
J Fenster mit Inhalten aus einem Array Füllen AWT, Swing, JavaFX & SWT 4
D JavaFX Ein Parameter von einem Stage(GUI) zu einem anderen übergeben AWT, Swing, JavaFX & SWT 6
T Bilder bei einem JFrame einfügen AWT, Swing, JavaFX & SWT 4
S JavaFX Variablen in einem FXML File verwenden AWT, Swing, JavaFX & SWT 8
A Objekt von einem Window erstellen? AWT, Swing, JavaFX & SWT 8
Drachenbauer Swing Wie ändere ich die helle geklickt-Farbe von einem JButton? AWT, Swing, JavaFX & SWT 4
ralfb1105 JavaFX Alert Confirmation Dialog aus einem Service Thread AWT, Swing, JavaFX & SWT 8
F JavaFX Aktuelle Zeit in einem TextField anzeigen AWT, Swing, JavaFX & SWT 7
M JavaFX Bild zur ImageView in einem Kreis anzeigen. AWT, Swing, JavaFX & SWT 4
F JavaFX PNG aus einem resource Ordner laden AWT, Swing, JavaFX & SWT 8
F JavaFX Checken ob der Input einem festgelegten Format gleicht AWT, Swing, JavaFX & SWT 7
B JavaFX Bilder in einem Gewissen bereich halten AWT, Swing, JavaFX & SWT 1
cool_brivk24 BufferedImage einem ClickEvent hinzufügen AWT, Swing, JavaFX & SWT 13
Q-bert Doppelclick auf einem List item AWT, Swing, JavaFX & SWT 9
J JavaFX von einem Array aus Buttons herausfinden auf welcher geklickt wurde aus dem Array. AWT, Swing, JavaFX & SWT 1
C SWT autosize bei gc.drawString() auf einem Label AWT, Swing, JavaFX & SWT 7
R Farbe zu einem Eckpunkt generieren AWT, Swing, JavaFX & SWT 2
T Reihenfolge der Komponenten im einem JFrame AWT, Swing, JavaFX & SWT 8
F abgeleitete Panels von einem ContentPanel AWT, Swing, JavaFX & SWT 4
heinz ketchup While-Schleife in einem Service für GUI AWT, Swing, JavaFX & SWT 22
D zwei JLabel stapeln in einem JPanel AWT, Swing, JavaFX & SWT 5
H Hintergrundbild in einem Programm AWT, Swing, JavaFX & SWT 4
F RGB-Werte aus einem String einlesen AWT, Swing, JavaFX & SWT 26
stroggi Swing Mehrere transparentes Objekte (Grafiken) über einem Bild (JLabel) darstellen AWT, Swing, JavaFX & SWT 4
I JavaFX Fenster wird auf einem anderen Rechner anders dargestellt AWT, Swing, JavaFX & SWT 5
DaCrazyJavaExpert Swing Zwei gleichgroße Panels in einem Scrollpane mit Layout AWT, Swing, JavaFX & SWT 9
W Swing Hilfe beim Einbinden von Bildern in einem JFrame AWT, Swing, JavaFX & SWT 8
F AWT mehrere Panels in einem Frame AWT, Swing, JavaFX & SWT 17
L JavaFX Mehrere JavaFX Szenen mit einem Menü AWT, Swing, JavaFX & SWT 1
L JavaFX Klickverhalten bei einem Panel AWT, Swing, JavaFX & SWT 1
V JavaFX Button Controller Fehler, trotz Erfolg in einem anderem Code? AWT, Swing, JavaFX & SWT 7
Y Darstellung und MouseHover bei bestimmten Wörtern in einem String AWT, Swing, JavaFX & SWT 2
GreenTeaYT Wie vergebe Ich den Jframe Title den Namen aus einem Element von der Arraylist ? AWT, Swing, JavaFX & SWT 4
H Geld pro Sekunde in einem Clickerspiel AWT, Swing, JavaFX & SWT 4
Java_RY wie kann ich auf JButtons in einem JPanel zugreifen AWT, Swing, JavaFX & SWT 3
F Zeichnung einem JPanel im Layoutmanager zuweisen AWT, Swing, JavaFX & SWT 3
Ghostman1711 Hinzufügen ausgewählter Dateinen des Filechoosers zu einem JTable AWT, Swing, JavaFX & SWT 9
T AWT Farben in einem Bild ändern AWT, Swing, JavaFX & SWT 8
R Swing JLabel berührung an einem anderen Label prüfen AWT, Swing, JavaFX & SWT 3
M Text in einem Label fett setzen AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben