彩球碰撞

时间:2012-01-16 22:49:02

标签: c opencv colors collision-detection

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

上面的代码检测到22个彩球并提取每个球的rgb值。 ican使用此rgb值来确定每个球的颜色。我正在尝试检测白球首先击中哪个彩球。我的想法是等待白球中心改变(即移动),下一个颜色球的中心变化是它击中的球。但我在编码时遇到了麻烦?

1 个答案:

答案 0 :(得分:0)

您可以将先前的x,y保存在变量中,并在每次迭代时检查它们,以确定它们是否已更改。 我建议你,而不是这个,检查白球中心到其他球的中心之间的距离 - 碰撞是指距离是半径的总和。

顺便说一句,这不是C。