由三点确定一个圆(圆心,半径)
整理日: 2015年2月16日
代码例
// 点结构体定义
typedef struct CEcPoint{
double x;
double y;
};
// 圆结体定义
typedef struct CEcCircle{
double raduls; // 半径
CEcPoint centre; // 圆心
}
// 3个点的结构体定义
typedef struct CEcPoint3{
CEcPoint p1;
CEcPoint p2;
CEcPoint p3;
};
void GetCircle(CEcCircle* pCircle, double Ax, double Ay,
double Bx, double By, double Cx, double Cy)
{
double mat1,mat2,mat3;
mat1 = ( (Bx*Bx + By*By) - (Ax*Ax + Ay*Ay) ) * (2 * (Cy-Ay) ) -
( (Cx*Cx + Cy*Cy) - (Ax*Ax + Ay*Ay) ) * (2 * (By-Ay) );
mat2 = ( 2 * (Bx-Ax) ) * ( ( Cx*Cx + Cy*Cy ) - ( Ax*Ax + Ay*Ay ) ) -
( 2 * (Cx-Ax) ) * ( ( Bx*Bx + By*By ) - ( Ax*Ax + Ay*Ay ) );
mat3 = 4 * ( (Bx-Ax) * (Cy-Ay) - (Cx-Ax) * (By-Ay) );
pCircle->centre.x = mat1/mat3;
pCircle->centre.y = mat2/mat3;
pCircle->raduis = sqrt ( (Ax-pCircle->centre.x) * (Ax-pCircle->centre.x) +
(Ay-pCircle->centre.y) * (Ay-pCircle->centre.y) );
}
// pCircle: 圆, p3: 3个点
void GetCircle(CEcCircle* pCircle, CEcPoint3* p3)
{
return GetCircle(pCircle, p3->Ax, p3->Ay, p3->Bx, p3->By, p3->Cx, p3->Cy);
}