使用分治法求出圆章的外圆方程c语言
时间: 2024-03-25 12:37:49 浏览: 95
分治算法C程序
圆章的外圆方程为:
(x - a)^2 + (y - b)^2 = r^2
其中,(a,b)为圆心坐标,r为半径。
以下是使用分治法求出圆章的外圆方程的C语言代码:
```c
#include <stdio.h>
#include <math.h>
#define EPS 1e-6
struct Point{
double x, y;
}p[100005];
double dis(struct Point a, struct Point b){
return sqrt((a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y));
}
double DnC(int l, int r){
if(l == r) return 0.0;
if(l + 1 == r) return dis(p[l], p[r]);
int mid = (l + r) >> 1;
double d = fmin(DnC(l, mid), DnC(mid+1, r));
int cnt = 0;
for(int i = l; i <= r; i++){
if(fabs(p[i].x - p[mid].x) <= d + EPS)
tmp[++cnt] = p[i];
}
sort(tmp+1, tmp+cnt+1, cmpy);
for(int i = 1; i <= cnt; i++){
for(int j = i + 1; j <= cnt && tmp[j].y - tmp[i].y <= d + EPS; j++){
d = fmin(d, dis(tmp[i], tmp[j]));
}
}
return d;
}
int main(){
int n;
scanf("%d", &n);
for(int i = 1; i <= n; i++){
scanf("%lf %lf", &p[i].x, &p[i].y);
}
sort(p+1, p+n+1, cmpx);
printf("%.2lf\n", DnC(1, n));
return 0;
}
```
其中,使用了一个点的结构体和一个求两点之间距离的函数。DnC函数为分治函数,主要是对每个小区间内的点两两求距离,并且将距离最小值返回。在主函数中,读入点的坐标,按照x坐标排序后调用DnC函数得到圆章的半径。
阅读全文