参考论文
《一种改进的随机圆检测算法 》-光电工程
数据结构
//圆信息
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;
}