求两圆相交交点模板

代码:

Point getpoint(Circle b,LD x)
{
    return { b.o.x+b.r * cos(x),b.o.y+b.r * sin(x) };
}

void Circle_insection(Circle a,Circle b)//两圆交点
{
    LD h = getlen(a.o,b.o);
    if (sign(h - a.r - b.r) > 0) return;
    if (sign(a.r - b.r - h) >0|| sign(b.r - a.r - h) > 0) return ;
    LD t = (h * h + b.r *b.r - a.r * a.r) / 2 / b.r / h;
    LD  ox = acos(t);
    LD oy = atan2(a.o.y-b.o.y, a.o.x-b.o.x);
    Point  o1= getpoint(b,ox + oy), o2 = getpoint(b,oy - ox);
    p[++cn] =o1;
    if (sign(o1.x-o2.x)==0&&sign(o1.y-o2.y)==0) return;
    p[++cn] =o2;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值