2012-01-07 21 views
2

imは、最初に白いボールがどの色のボールと接触するかを検出しようとしています。ボールの衝突検出

座標とすべてのボールの色が知られており、唯一のXY座標があるので、ボールのビデオフィードは、トップビューであろう

*//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

それを置くべきです。そのC. imはopencv aswellを使ってもよく見える –

答えて

1

ボールの中心の座標を知っているので、ボールの中心からボールの中心までのユークリッド距離を計算できます。 2つのボールセンター間の距離がその半径の合計になると、衝突が発生します。 希望に役立ちます。

+0

です。どのようにそれを実装するための任意のアイデア?おかげで、 –

+0

はあなたにx1、y1がボール1の中心座標、r1が半径、x2、y2、r2がセカンドボールの場合はかなり前方に見えます。そしてsqrt(pow((x1-x2)、2)+ pow (y1-y2)、2))= r1 + r2あなたはコリソンを持っています –

+0

はい。もちろん。あなたの助けをありがとう –