1

次のように画像の重心を計算しようとしています。

// 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);

私はこれをアルゴリズムhereから適応させましたが、間違った結果が得られています。この適応の何が問題なのか誰か教えてもらえますか?

4

2 に答える 2

6

代わりに、ここ に置き換えるcentroid.x += (points[i].x*points[(i+1)%numPoints].x)*a; 必要があるはずです。centroid.x += (points[i].x+points[(i+1)%numPoints].x)*a;*+

于 2012-07-18T13:23:15.450 に答える
1

このサンプルを取ったスレッドを少し調べたところ、centroid.x += (points[i].x + points[(i+1)%numPoints].x)*a; が必要だと思います。centroid.y += (points[i].y + points[(i+1)%numPoints].y)*a;

于 2012-07-18T13:24:48.237 に答える