столкновение цветного шара - PullRequest
2 голосов
/ 17 января 2012
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 голосов
/ 17 января 2012

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

Кстати, это не C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...