您的位置:首页 > 其它

判断一个点是否在圆内(三点确定一个圆)

2015-09-05 19:03 302 查看
三角形的外接圆圆心是任意两边的垂直平分线的交点。三角形外接圆圆心叫外心。///<summary>
///Returnstrueifthepoint(p)liesinsidethecircumcirclemadeupbypoints(p1,p2,p3)
///</summary>
///<remarks>
///NOTE:Apointontheedgeisinsidethecircumcircle
///</remarks>
///<paramname="p">Pointtocheck</param>
///<paramname="p1">Firstpointoncircle</param>
///<paramname="p2">Secondpointoncircle</param>
///<paramname="p3">Thirdpointoncircle</param>
///<returns>trueifpisinsidecircle</returns>
privatestaticboolInCircle(Geometry.Pointp,Geometry.Pointp1,Geometry.Pointp2,Geometry.Pointp3)
{
//ReturnTRUEifthepoint(xp,yp)liesinsidethecircumcircle
//madeupbypoints(x1,y1)(x2,y2)(x3,y3)
//NOTE:Apointontheedgeisinsidethecircumcircle

if(System.Math.Abs(p1.Y-p2.Y)<double.Epsilon&&System.Math.Abs(p2.Y-p3.Y)<double.Epsilon)
{
//INCIRCUM-F-Pointsarecoincident!!
returnfalse;
}

doublem1,m2;
doublemx1,mx2;
doublemy1,my2;
doublexc,yc;

if(System.Math.Abs(p2.Y-p1.Y)<double.Epsilon)
{
m2=-(p3.X-p2.X)/(p3.Y-p2.Y);
mx2=(p2.X+p3.X)*0.5;
my2=(p2.Y+p3.Y)*0.5;
//CalculateCircumCirclecenter(xc,yc)
xc=(p2.X+p1.X)*0.5;
yc=m2*(xc-mx2)+my2;
}
elseif(System.Math.Abs(p3.Y-p2.Y)<double.Epsilon)
{
m1=-(p2.X-p1.X)/(p2.Y-p1.Y);
mx1=(p1.X+p2.X)*0.5;
my1=(p1.Y+p2.Y)*0.5;
//CalculateCircumCirclecenter(xc,yc)
xc=(p3.X+p2.X)*0.5;
yc=m1*(xc-mx1)+my1;
}
else
{
m1=-(p2.X-p1.X)/(p2.Y-p1.Y);
m2=-(p3.X-p2.X)/(p3.Y-p2.Y);
mx1=(p1.X+p2.X)*0.5;
mx2=(p2.X+p3.X)*0.5;
my1=(p1.Y+p2.Y)*0.5;
my2=(p2.Y+p3.Y)*0.5;
//CalculateCircumCirclecenter(xc,yc)
xc=(m1*mx1-m2*mx2+my2-my1)/(m1-m2);
yc=m1*(xc-mx1)+my1;
}

doubledx=p2.X-xc;
doubledy=p2.Y-yc;
doublersqr=dx*dx+dy*dy;
//doubler=Math.Sqrt(rsqr);//Circumcircleradius
dx=p.X-xc;
dy=p.Y-yc;
doubledrsqr=dx*dx+dy*dy;

return(drsqr<=rsqr);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: