以下程序是画一个箭头,想了半天,也不知道怎么算了,,有没有哪位讲讲?? CvPoint p,q;
            p.x = (int) frame1_features[i].x;
            p.y = (int) frame1_features[i].y;
            q.x = (int) frame2_features[i].x;
            q.y = (int) frame2_features[i].y;
            double angle; angle = atan2( (double) p.y - q.y, (double) p.x - q.x );
            double hypotenuse; hypotenuse = sqrt( square(p.y - q.y) + square(p.x - q.x) )
                                   
            q.x = (int) (p.x - 3 * hypotenuse * cos(angle));
            q.y = (int) (p.y - 3 * hypotenuse * sin(angle));            cvLine( frame1, p, q, line_color, line_thickness, CV_AA, 0 );            p.x = (int) (q.x + 9 * cos(angle + pi / 4));
            p.y = (int) (q.y + 9 * sin(angle + pi / 4));
            cvLine( frame1, p, q, line_color, line_thickness, CV_AA, 0 );
            p.x = (int) (q.x + 9 * cos(angle - pi / 4));
            p.y = (int) (q.y + 9 * sin(angle - pi / 4));
            cvLine( frame1, p, q, line_color, line_thickness, CV_AA, 0 );

解决方案 »

  1.   

    把箭头的起始点坐标算出来,用MoveTO,LineTo直接画线不就好了吗?楼主的疑问是什么
      

  2.   

    四个坐标就, moveto  lineto 就可以解决了吧
      

  3.   

    箭头就直接画几条线不就可以了吗?箭头的角度自己定一下,然后用sin,cos不就ok了吗?
      

  4.   

    五uuuuuwuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 似乎是很容易,那根据我上面的程序,有谁能画出来,是个什么样的箭头吗?我的疑惑是,算箭头的两边的线的时候,公式是怎么想出来的。比如 
     p.x = (int) (q.x + 9 * cos(angle + pi / 4));