2012-01-07 5 views
2

im пытается определить, с каким цветом вначале контактирует белый шар.обнаружение столкновения с мячом

координаты и цвета всех шаров известны и видеотрансляция из шаров будет вид сверху так что координаты только в ху

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

*//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); 
}* 
+0

Какой язык программирования? – iND

+0

shouldve положить это. Его C. im используя opencv а также –

ответ

1

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

+0

, который выглядит хорошо. любая идея, как это реализовать? спасибо –

+0

выглядит довольно непрозрачным для меня, если у вас есть x1, y1 в качестве координат для шара 1 центра и r1 для радиуса и x2, y2, r2 для второго шара, тогда если sqrt (pow ((x1-x2), 2) + pow ((y1-y2), 2)) = r1 + r2 у вас есть коллизон –

+0

да. конечно. Большое спасибо за вашу помощь –

Смежные вопросы