D
hatte das problem auch mal (bei einem beliebigen Polygon). Habe das so gemacht
bool pointInPoly(int pX, int pY, int *verticeData, int n)
{
int cN=0;
if(n<=2)
return false;
for(int i=0;i<n;++i) {
int p1X=verticeData[2*i];
int p1Y=verticeData[2*i+1];
int p2X=(i<(n-1))?verticeData[2*(i+1)]:verticeData[0];
int p2Y=(i<(n-1))?verticeData[2*(i+1)+1]:verticeData[1];
if(((p1Y<=pY) && (p2Y>pY)) || ((p1Y>pY) && (p2Y<=pY))) {
float vT=float((pY-p1Y)/(p2Y-p1Y));
if(pX<p1X+vT*(p2X-p1X))
++cN;
}
}
return (cN&1);
}
pX, pY : zu testender Punkt.
verticeData : Zeiger auf ein Array, in dem abwechselnd für alle Punkte die X und Y Koordinaten sind. zB:
// polygon mit 3 eckpunkten
int verticeData[6]={Xp1, Yp1, Xp2, Yp2, Xp3, Yp3};
n : anzahl der zu verwendenen Punkte.
man kann die Funktion natürlich noch beliebig umändern.