求三角形的外接圆和内切圆

三角形外接圆求法::
Point circumcircleofTriangle(PointSet[])
{
    double a,b,c,xa,xb,xc,ya,yb,yc,c1,c2;
    Point tem;
    a = Distance(PointSet[0],PointSet[1]);
    b = Distance(PointSet[0],PointSet[2]);
    c = Distance(PointSet[2],PointSet[1]);
    r = a *b *c/triangleArea(PointSet[])/4;//triangleArea(PointSet[])为三角形面积
    xa = PointSet[0].x; ya = PointSet[0].y;
    xb = PointSet[1].x; yb = PointSet[1].y;
    xc = PointSet[2].x; yc = PointSet[2].y;
    c1 = (xa*xa+ya*ya-xb*xb-yb*yb)/2;
    c2 = (xa*xa+ya*ya-xc*xc-yc*yc)/2;
    tem.x = (c1 * (ya-yc) - c2 *(ya-yb))/((xa-xb)*(ya-yc)-(xa-xc)*(ya-yb));
    tem.y = (c1*(xa - xc)-c2 * (xa - xb))/((ya-yb)*(xa-xc)-(ya-yc)*(xa-xb));
    return tem;    
//tem为圆心。。
} 
三角形内切圆::
Point incircleofTriangle(PointSet[])
{
    double a,b,c,xa,xb,xc,ya,yb,yc,c1,c2;
    Point tem;
    a = Distance(PointSet[0],PointSet[1]);
    b = Distance(PointSet[0],PointSet[2]);
    c = Distance(PointSet[2],PointSet[1]);
    r = 2 * triangeArea(PointSet[])/(a+b+c);
    angleA = arccos((b*b+c*c-a*a)/(2*b*c));
    angleB = arccos((a*a+c*c-b*b)/(2*a*c));
    angleC = arccos((b*b+a*a-c*c)/(2*b*a));
    p = sin(angleA/2);
    p2 = sin(angleB/2);
    P3 = sin(angleC/2);
    xa = PointSet[0].x; ya = PointSet[0].y;
    xb = PointSet[1].x; yb = PointSet[1].y;
    xc = PointSet[2].x; yc = PointSet[2].y;
    f1 = ((r/p2)*(r/p2)-(r/p)*(r/p)+xa*xa-xb*xb+ya*ya-yb*yb)/2;
    f2 = ((r/p3)*(r/p3)-(r/p)*(r/p)+xa*xa-xc*xc+ya*ya-yc*yc)/2;
    tem.x = (f1 * (ya-yc)-f2*(ya-yb))/((xa-xb)*(ya-yc)-(xa-xc)*(ya-yb));
    tem.y = (f1*(xa-xc)-f2*(xa-xb))/((ya-yb)*(xa-xc)-(ya-yc)*(xa-xb));
    return tem;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值