обнаружение столкновения шаров - PullRequest
2 голосов
/ 07 января 2012

Я пытаюсь определить, какого цвета шарик изначально соприкасается с белым шариком.

координаты и цвета всех шаров известны, и видеопоток шаров будет вид сверху, поэтому в x-y есть только координаты

мой код для обнаруженных шаров выглядит следующим образом

*//draw all detected circles
for (int i = 0; i < circles->total; i++)
{
     // round the floats to an int
     float* p = (float*)cvGetSeqElem(circles, i);
     cv::Point center(cvRound(p[0]), cvRound(p[1]));
     int radius = cvRound(p[2]);
     //uchar* ptr;
     //ptr = cvPtr2D(img, center.y, center.x, NULL);
     //printf("B: %d G: %d R: %d\n", ptr[0],ptr[1],ptr[2]);
     CvScalar s;
    s = cvGet2D(img,center.y, center.x);//colour of circle
    printf("B: %f G: %f R: %f\n",s.val[0],s.val[1],s.val[2]);
     // draw the circle center
     cvCircle(img, center, 3, CV_RGB(0,255,0), -1, 8, 0 );
     // draw the circle outline
     cvCircle(img, center, radius+1, CV_RGB(0,0,255), 2, 8, 0 );
     //display coordinates
     printf("x: %d y: %d r: %d\n",center.x,center.y, radius);
}* 

1 Ответ

1 голос
/ 08 января 2012

Поскольку вы знаете координаты центров шариков, вы можете просто рассчитать евклидово расстояние от центра белого шарика до каждого центра шарика.как только расстояние между двумя центрами шаров будет суммой их радиусов, тогда вы столкнетесь.Надеюсь, это поможет.

...