Pregunta

I am trying to calculate an image centroid like so:

// Calculate centroid
    double signedArea = 0.0;
    sskp_point centroid;
    for(int i=0;i<numPoints;i++)
    {
        double a = (points[i].x*points[(i+1)%numPoints].y)-(points[(i+1)%numPoints].x*points[i].y);
        signedArea += a;
        centroid.x += (points[i].x*points[(i+1)%numPoints].x)*a;
        centroid.y += (points[i].y*points[(i+1)%numPoints].y)*a;
        printf("points[%d] = { %f, %f }\n",i,points[i].x,points[i].y);
    }
    signedArea /= 2.0;
    centroid.x /= (6*signedArea);
    centroid.y /= (6*signedArea);
    printf("centroid = { %f, %f }\n",centroid.x,centroid.y);

I have adapted this from the algorithm here, however it is giving me the wrong results, can anyone tell me what is wrong with this adaptation?

¿Fue útil?

Solución

You have written centroid.x += (points[i].x*points[(i+1)%numPoints].x)*a; instead it should be centroid.x += (points[i].x+points[(i+1)%numPoints].x)*a; you have to replace * with + here.

Otros consejos

I looked a little into the thread you took this sample and i think that you should have centroid.x += (points[i].x + points[(i+1)%numPoints].x)*a; centroid.y += (points[i].y + points[(i+1)%numPoints].y)*a;

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top