punkt im polygon wie ?

  • Antworten:5
Sascha D.
  • Forum-Beiträge: 74

15.03.2012, 12:41:46 via Website

hallo leute,

gibt es eine funktion wie in normal java um einen punkt im polygon zu ermitteln ?
ansonsten für einen funktionierenden algorithmus der flott ist, wäre ich dankbar.

bei java gibts ja
Polygon contains(int x, int y);

aber awt gibts ja auf android nicht.
und der algo, den ich gefunden habe, der kommt bei ecken nicht klar.
public boolean contains(int x, int y) {
boolean oddTransitions = false;
for (int i = 0, j = polySides - 1; i < polySides; j = i++) {
if ((polyY[i] < y && polyY[j] >= y)
|| (polyY[j] < y && polyY[i] >= y)) {
if (polyX[i] + (y - polyY[i]) / (polyY[j] - polyY[i])
* (polyX[j] - polyX[i]) < x) {
oddTransitions = !oddTransitions;
}
}
}
return oddTransitions;
}

Antworten
reiti.net
  • Forum-Beiträge: 339

15.03.2012, 13:29:10 via Website

wie exakt soll das denn sein?

Es gibt mehrere Methoden das mathematisch zu ermitteln - dazu müsstest du aber wissen welche seite der linie innerhalb und welche außerhalb des polygons ist, in der Regel machtman das über ne art "culling" - du kannst dann relativ einfach herausfinden auf welcher Seite der Linie ein Punkt ist, und wenn er für alle Linien des Polygons "innen" ist, dann hast du die Position. Gibt's jetzt mehrere mathematische Möglichkeiten, die ich nicht im Kopf habe, wenn du mit Vektoren rechnest kannst du über das Scalarprodukt herausfinden auf welcher Seite der eine Vektor von dem anderen ist - hab's jetzt aber nicht im Kopf, ist nur ne Anregung. Mit einem Punkt und einer Linie hast du ja 2 Vektoren.

Ich bin mir aber sicher, es gibt bereits irgendeine eingebaute Funktionalität in irgend einer lib :-)

Antworten
Sascha D.
  • Forum-Beiträge: 74

15.03.2012, 14:01:02 via Website

naja eben keine verschnörkelungen.
so nen art stopschild sozusagen.

Antworten
reiti.net
  • Forum-Beiträge: 339

15.03.2012, 14:25:54 via Website

denk dir einen kreis drum herum und prüfe ob der abstand zum mittelpunkt kleiner ist als der halbe radius ..

da macht es wirklich keinen sinn polygongenau zu überprüfen :-)

edit: achso, das geht am schnellsten mit ein bisschen vektoralgebra, einfach mal nach "vektor länge ermitteln" suchen, falls du keine vektorenklassen hast - ist nicht so komplex

— geändert am 15.03.2012, 14:27:13

Antworten
Sascha D.
  • Forum-Beiträge: 74

15.03.2012, 15:39:06 via Website

jetzt wo dus sagst. hätt ich ja fast schon selbst drauf kommen können.

wollte erst schneiden von gerade berechnen.

Antworten
Sascha D.
  • Forum-Beiträge: 74

15.03.2012, 19:01:23 via Website

hab bei google was brauchbares gefunden, scheint auch zu funtionieren.

Antworten