三点确定一个圆

struct Point {
    double x, y;
} a[max_n];

struct Round {
    double r;
    Point o;

    bool On_Round(Point p) {
        return (p.x - o.x) * (p.x - o.x) + (p.y - o.y) * (p.y - o.y) <= r * r;
    }
};

Round Make_Round(Point p) {
    return {0, p};
}

Round Make_Round(Point u, Point v) {
    Point o = {(u.x + v.x) / 2, (u.y + v.y) / 2};
    double r = sqrt((u.x - v.x) * (u.x - v.x) + (u.y - v.y) * (u.y - v.y)) / 2;
    return {r, o};
}

Round Make_Round(Point u, Point v, Point w) {
    double a1 = ((u.x * u.x - v.x * v.x) + (u.y * u.y - v.y * v.y)) / 2;
    double a2 = ((u.x * u.x - w.x * w.x) + (u.y * u.y - w.y * w.y)) / 2;
    Point o = {0, 0};
    o.x = ((u.y - v.y) * a2 - (u.y - w.y) * a1) / ((u.y - v.y) * (u.x - w.x) - (u.x - v.x) * (u.y - w.y));
    o.y = ((u.x - w.x) * a1 - (u.x - v.x) * a2) / ((u.y - v.y) * (u.x - w.x) - (u.x - v.x) * (u.y - w.y));
    double r = sqrt((u.x - o.x) * (u.x - o.x) + (u.y - o.y) * (u.y - o.y));
    return {r, o};
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值