查找图像等高线质心

我试图像这样计算图像质心:

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

我已经从算法中对此进行了调整,但它给了我错误的结果 ,有人能告诉我这个改编有什么问题吗?

你写过centroid.x += (points[i].x*points[(i+1)%numPoints].x)*a; 相反它应该是centroid.x += (points[i].x+points[(i+1)%numPoints].x)*a; 你必须在这里替换*

我看了一下你采取这个样本的线程,我认为你应该有centroid.x + =(points [i] .x + points [(i + 1)%numPoints] .x)* a; centroid.y + =(points [i] .y + points [(i + 1)%numPoints] .y)* a;