• 大小: 2.11KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-02-21
  • 语言: C/C++
  • 标签: C/C++  

资源简介

:输入N个点的坐标,求一个能覆盖全部点 的最小圆

资源截图

代码片段和文件信息

/*输入n个点的坐标,n<500 求半径最小的圆能覆盖这n个点,在圆周上也算覆盖。
输出圆心坐标和半径的100倍的整数部分(不要四拾伍入) 
输入格式

第一行一个整数n

接着n行,每行一个点的坐标,两个整数,中间一个空格

重复输入直至n=0



输出格式

每行一个结果,最小圆的X坐标的100倍整数部分、Y坐标的100倍整数部分、半径的100倍整数部分。

每行都有回车,n=0的除外



例子:

输入:

3

0 0

1 0

1 1

4

5 3

3 3

5 0

0 2

5

0 1

1 0

2 1

3 2

4 1

0



输出:

50 50 70

270 150 274

200 100 200*/


#include

#include

#include

#define eps 1e-8

const int N=1000;

struct point {double xy;}cenp[N]po;

double r;

int nixend[N]yend[N]rend[N]count=0;

double distance(point p1point p2)

{

 return sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));

}



double dist2(point p1point p2)

{

 return (p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y);

}





void calc(double a1double b1double c1double a2double b2double c2)

{

 cen.y=(c1*a2-c2*a1)/(b1*a2-b2*a1);

 cen.x=(c1*b2-c2*b1)/(a1*b2-b1*a2);

}



void

评论

共有 条评论