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

参考论文

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

数据结构

//圆信息
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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值