由三点确定一个圆(圆心,半径)

来源:互联网 发布:王者荣耀辅助软件 编辑:程序博客网 时间:2024/06/05 03:47

参考论文

《一种改进的随机圆检测算法 》-光电工程 

数据结构

//圆信息struct CircleInfo{    CvPoint circlecentre; //圆心    double raduis;        //半径};

//点信息struct CvPoint{    int x;     int y};

CircleInfo* GetCircle(CvPoint point1,CvPoint point2,CvPoint point3){    CircleInfo *circle3point;    circle3point = new CircleInfo;    double mat1,mat2,mat3 ;    mat1 = ((point2.x*point2.x +point2.y*point2.y)-(point1.x*point1.x +point1.y*point1.y))*(2*(point3.y-point1.y))- ((point3.x*point3.x +point3.y*point3.y)-(point1.x*point1.x +point1.y*point1.y))*(2*(point2.y-point1.y));    mat2 = (2*(point2.x-point1.x))*((point3.x*point3.x+point3.y*point3.y)-(point1.x*point1.x +point1.y*point1.y))- (2*(point3.x-point1.x))*((point2.x*point2.x+point2.y*point2.y)-(point1.x*point1.x +point1.y*point1.y));    mat3 = 4*((point2.x-point1.x)*(point3.y-point1.y) - (point3.x-point1.x)*(point2.y-point1.y));    circle3point->circlecentre.x = mat1/mat3;    circle3point->circlecentre.y = mat2/mat3;    circle3point->raduis = sqrt((double)((point1.x-circle3point->circlecentre.x)*(point1.x-circle3point->circlecentre.x) +  (point1.y-circle3point->circlecentre.y)*(point1.y-circle3point->circlecentre.y)));    return circle3point;}

原创粉丝点击