[solved] raycasting (punkt in polygon) ergebnis stimmt einfach ned :(
InfiX 15.01.2011 - 03:57 1286 2
InfiX
she/her
|
ich hab ein problem, und zwar möcht ich herausfinden ob ein punkt in einem polygon liegt dazu hab ich die methode hier verwendet: http://alienryderflex.com/polygon/nun stimmt aber einfach oft das ergebnis einfach ned und ich komm einfach nicht drauf was ich falsch mache... (unten der erste wert ist XY vom punkt und die nächsten 2 sind die 2 eckpunkte vom quadrat) ergebnis ist true, ok soweit ... jetzt ist das ergebnis plötzlich false, obwohl der punkt drin liegt (kann man auch an den koordinaten ablesen so schaut meine funktion jetzt aus (eigentlich anders aber ich habs der einfachheit halber mal meine geändert und fast genauso formatiert wie im beispiel um zu schauen ob ich einen fehler find, find ihn aber nicht ) boolean inside(float testX, float testY) {
boolean oddResult = false;
int j = polyX.length-1;
for( int i=0; i < polyX.length; i++) {
if( polyY[i] < testY && polyY[j] >= testY || polyY[j] < testY && polyY[i] >= testY ) {
if( polyX[i] + (testY - polyY[i]) / (polyY[j]-polyY[i]) * (polyX[j] - polyX[i]) < testX ) {
oddResult = !oddResult;
}
}
}
return oddResult;
}
edit: war ja klar, jetzt wo ich stundenlang herumprobiert hab und das ganze hier poste komm ich drauf... hab das j = i; am ende der for-schleife vergessen
so muss es ausschaun:boolean inside(float testX, float testY) {
boolean oddResult = false;
int j = polyX.length-1;
for( int i=0; i < polyX.length; i++) {
if( polyY[i] < testY && polyY[j] >= testY || polyY[j] < testY && polyY[i] >= testY ) {
if( polyX[i] + (testY - polyY[i]) / (polyY[j]-polyY[i]) * (polyX[j] - polyX[i]) < testX ) {
oddResult = !oddResult;
}
}
j = i;
}
return oddResult;
}
Bearbeitet von InfiX am 15.01.2011, 04:15
|
Rektal
Here to stay
|
lol :-)
|
Ringding
Pilot
|
|