创建一个单文档程序,实现以下功能:用鼠标在界面点三点,然后按鼠标右键,出现一个过此三点的圆

解决方案 »

  1.   

    根据三点的坐标计算出圆心坐标与半径,再用MFC的画员函数
      

  2.   

    ABC三点
    取AB的中垂线
    取BC的中垂线
    在计算中垂线的焦点
    得到的就是圆心点吧
    然后圆心点到A点的距离就是半径,然后画圆
      

  3.   

    我想记录鼠标点的三点,是该定义一个CPoint的数组吗?算圆心和半径都是double型的,点的坐标是整型的,会不会误差很大啊,我是初学的,不是很了解,但现在急着把它做出来
      

  4.   

    用6个double记录即可,坐标强制转换伪double
      

  5.   


    //三点求圆
    //输入,三个点的坐标
    //输出,圆心坐标,半径
    void
    Calc_TPC( double x1, double y1, double x2, double y2, double x3, double y3, OUT double *cx, OUT double *cy, OUT double *r )
    {
    double a, b, e;
        
        a = ( x1 + x2 ) * ( x1 - x2 ) + ( y1 + y2 ) * ( y1 - y2 );
        b = ( x3 + x2 ) * ( x3 - x2 ) + ( y3 + y2 ) * ( y3 - y2 );
        e = ( x1 - x2 ) * ( y3 - y2 ) - ( x2 - x3 ) * ( y2 - y1 ); *cx = ( a * ( y3 - y2 ) + b * ( y2 - y1 ) ) / ( 2 * e );
    *cy = ( a * ( x2 - x3 ) + b * ( x1 - x2 ) ) / ( 2 * e );
    *r = sqrt( ( x1 - *cx ) * ( x1 - *cx ) + ( y1 - *cy ) * ( y1 - *cy ) );}