"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

[solved] raycasting (punkt in polygon) ergebnis stimmt einfach ned :(

InfiX 15.01.2011 - 03:57 1286 2
Posts

InfiX

she/her
Avatar
Registered: Mar 2002
Location: Graz
Posts: 14195
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...

rc1_163696.png

(unten der erste wert ist XY vom punkt und die nächsten 2 sind die 2 eckpunkte vom quadrat)

ergebnis ist true, ok soweit

rc2_163697.png

... 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 :()

Code:
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:

Code:
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
Registered: Dec 2002
Location: Inside
Posts: 4452
lol :-)

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz