Я нашел центр масс неправильной формы, но теперь мне нужно вычислить расстояние до любой заданной точки.
Я понимаю, что mc — это вектор точек, но как мне найти координаты mc, чтобы я мог рассчитать расстояние между центром масс и какой-то другой точкой. Спасибо
vector<Point2f> mc( contours.size() );
for( int i = 0; i < contours.size(); i++ )
{
mc[i] = Point2f( mu[i].m10/mu[i].m00 , mu[i].m01/mu[i].m00 );
}
Сначала вы должны получить точку по индексу. Позволять :
int size = contours.size();
Индексы: i = 0 ... size
, Точка индекса i
является
mc[i];
Координаты этой точки могут быть достигнуты:
float xCoor = mc[i].x;
float yCoor = mc[i].y;
Конечно, вы можете прочитать эти значения в цикле из i = 0 to size
если вы хотите прочитать все координаты всех mc
точки.
Редактировать:
Я предполагал, что вы знаете, как найти центр масс, и просто спрашивал, как получить координаты. Но если вы хотите получить центр масс и расстояние от центра масс до некоторой другой точки, то вы можете сделать следующее:
float distance;
float totalX=0.0, totalY=0.0;
for(int i=0; i<size; i++) {
totalX+=mc[i].x;
totalY+=mc[i].y;
}
Point2f massCenter(totalX/size, totalY/size); // condition: size != 0
Point2F someOtherPoint(someXVal, someYVal);
distance = massCenter.distance(someOtherPoint);
это расстояние от центра масс до другой точки.
Надеюсь, это поможет!
mc[i].x
а также mc[i].y
координаты x и y точки индекса i.
Чтобы вычислить центр масс:
cv::Point2f baricenter(0,0);
for( int i = 0; i < mc.size(); i++ )
barycenter += mc[i];
barycenter.x /= mc.size();
barycenter.y /= mc.size();
Убедитесь, что у вас есть хотя бы одна точка в вашем векторе.