1: #include<cstdio>
2: #include<cstdlib>
3: #include<cmath>
4: #define eps 1e-8
5: #define max 1000000
6: struct Point
7: {
8: float x ;
9: float y ;
10: };
11: Point point[max];
12: using namespace std ;
13: int main()
14: {
15: int n = 0 ;
16: state:
17: printf("请输入点的个数(上限不要超过1000,000):/n");
18: scanf("%d",&n) ; //input the number of points
19: while(n<3)
20: {
21: printf("输入点个数小于三个,无法确定唯一圆,请重新输入!/n");
22: scanf("%d",&n);
23: }
24: double sum_x = 0 ;
25: double sum_y = 0 ;
26: double sum_xy = 0 ;
27: double sum_x_2 = 0 ;
28: double sum_y_2 = 0 ;
29: double sum_x_y_2 = 0 ;
30: double sum_y_x_2 = 0 ;
31: double sum_x_3 = 0 ;
32: double sum_y_3 = 0 ;
33: double temp_x_2 = 0 ;
34: double temp_y_2 = 0 ;
35: double P , Q ,R ,T , W ;
36: printf("请输入点的坐标,中间以空格间隔:/n");
37: for(int i=0;i<n;++i) //input n point location
38: {
39: scanf("%f %f",&point[i].x,&point[i].y);
40: sum_x += point[i].x;
41: sum_y += point[i].y;
42: sum_xy +=point[i].x*point[i].y ;
43: temp_x_2 = point[i].x*point[i].x ;
44: temp_y_2 = point[i].y*point[i].y ;
45: sum_x_2 += temp_x_2 ;
46: sum_y_2 += temp_y_2 ;
47: sum_x_y_2 += temp_y_2*point[i].x ;
48: sum_y_x_2 += temp_x_2*point[i].y ;
49: sum_x_3 += temp_x_2*point[i].x ;
50: sum_y_3 += temp_y_2*point[i].y ;
51: }
52: P = n*sum_x_2 - sum_x*sum_x ;
53: Q = n*sum_xy - sum_x*sum_y ;
54: R = n*(sum_x_3+sum_x_y_2)-(sum_x_2+sum_y_2)*sum_x ;
55: T = n*sum_y_2 - sum_y*sum_y ;
56: W = n*(sum_y_x_2+sum_y_3)-(sum_x_2+sum_y_2)*sum_y ;
57: if(abs(Q*Q-P*T)<eps)
58: {
59: printf("ERROE/n");
60: goto state;
61: }
62: else
63: {
64: double A = (W*Q-R*T)/(P*T-Q*Q);
65: double B = (P*W-Q*R)/(Q*Q-P*T);
66: double C = -(sum_x_2+sum_y_2+A*sum_x+B*sum_y)/n ;
67: double r = 0.50*sqrt(A*A+B*B-4*C);
68: printf("圆心坐标 :");
69: printf("(%f,%f)/n",A/2,B/2);
70: printf("圆半径 : ");
71: printf("%f/n",r) ;
72: }
1: #include<cstdio>
2: #include<cstdlib>
3: #include<cmath>
4: #define eps 1e-8
5: #define max 1000000
6: struct Point
7: {
8: float x ;
9: float y ;
10: };
11: Point point[max];
12: using namespace std ;
13: int main()
14: {
15: int n = 0 ;
16: state:
17: printf("请输入点的个数(上限不要超过1000,000):/n");
18: scanf("%d",&n) ; //input the number of points
19: while(n<3)
20: {
21: printf("输入点个数小于三个,无法确定唯一圆,请重新输入!/n");
22: scanf("%d",&n);
23: }
24: double sum_x = 0 ;
25: double sum_y = 0 ;
26: double sum_xy = 0 ;
27: double sum_x_2 = 0 ;
28: double sum_y_2 = 0 ;
29: double sum_x_y_2 = 0 ;
30: double sum_y_x_2 = 0 ;
31: double sum_x_3 = 0 ;
32: double sum_y_3 = 0 ;
33: double temp_x_2 = 0 ;
34: double temp_y_2 = 0 ;
35: double P , Q ,R ,T , W ;
36: printf("请输入点的坐标,中间以空格间隔:/n");
37: for(int i=0;i<n;++i) //input n point location
38: {
39: scanf("%f %f",&point[i].x,&point[i].y);
40: sum_x += point[i].x;
41: sum_y += point[i].y;
42: sum_xy +=point[i].x*point[i].y ;
43: temp_x_2 = point[i].x*point[i].x ;
44: temp_y_2 = point[i].y*point[i].y ;
45: sum_x_2 += temp_x_2 ;
46: sum_y_2 += temp_y_2 ;
47: sum_x_y_2 += temp_y_2*point[i].x ;
48: sum_y_x_2 += temp_x_2*point[i].y ;
49: sum_x_3 += temp_x_2*point[i].x ;
50: sum_y_3 += temp_y_2*point[i].y ;
51: }
52: P = n*sum_x_2 - sum_x*sum_x ;
53: Q = n*sum_xy - sum_x*sum_y ;
54: R = n*(sum_x_3+sum_x_y_2)-(sum_x_2+sum_y_2)*sum_x ;
55: T = n*sum_y_2 - sum_y*sum_y ;
56: W = n*(sum_y_x_2+sum_y_3)-(sum_x_2+sum_y_2)*sum_y ;
57: if(abs(Q*Q-P*T)<eps)
58: {
59: printf("ERROE/n");
60: goto state;
61: }
62: else
63: {
64: double A = (W*Q-R*T)/(P*T-Q*Q);
65: double B = (P*W-Q*R)/(Q*Q-P*T);
66: double C = -(sum_x_2+sum_y_2+A*sum_x+B*sum_y)/n ;
67: double r = 0.50*sqrt(A*A+B*B-4*C);
68: printf("圆心坐标 :");
69: printf("(%f,%f)/n",A/2,B/2);
70: printf("圆半径 : ");
71: printf("%f/n",r) ;
72: }
73: system("pause");
74: return 0 ;
75: }
73: system("pause");
74: return 0 ;
75: }
#include
#include
#include
#define eps 1e-8 #define max 1000000 struct Point { float x ; float y ; }; Point point[max]; using namespace std ; int main() { int n = 0 ; state: printf("请输入点的个数(上限不要超过1000,000):/n"); scanf("%d",&n) ; //input the number of points while(n<3) { printf("输入点个数小于三个,无法确定唯一圆,请重新输入!/n"); scanf("%d",&n); } double sum_x = 0 ; double sum_y = 0 ; double sum_xy = 0 ; double sum_x_2 = 0 ; double sum_y_2 = 0 ; double sum_x_y_2 = 0 ; double sum_y_x_2 = 0 ; double sum_x_3 = 0 ; double sum_y_3 = 0 ; double temp_x_2 = 0 ; double temp_y_2 = 0 ; double P , Q ,R ,T , W ; printf("请输入点的坐标,中间以空格间隔:/n"); for(int i=0;i
< ; 0 return system(?pause?); } printf(?%f/n?,r) ?); : printf(?圆半径 2); 2,B printf(?(%f,%f)/n?,A :?); printf(?圆心坐标 r="0.50*sqrt(A*A+B*B-4*C);" double C="-(sum_x_2+sum_y_2+A*sum_x+B*sum_y)/n" B="(P*W-Q*R)/(Q*Q-P*T);" A="(W*Q-R*T)/(P*T-Q*Q);" { else state; goto printf(?ERROE/n?); if(abs(Q*Q-P*T)
1: #include<cstdio>
2: #include<cstdlib>
3: #include<cmath>
4: #define eps 1e-8
5: #define max 1000000
6: struct Point
7: {
8: float x ;
9: float y ;
10: };
11: Point point[max];
12: using namespace std ;
13: int main()
14: {
15: int n = 0 ;
16: state:
17: printf("请输入点的个数(上限不要超过1000,000):/n");
18: scanf("%d",&n) ; //input the number of points
19: while(n<3)
20: {
21: printf("输入点个数小于三个,无法确定唯一圆,请重新输入!/n");
22: scanf("%d",&n);
23: }
24: double sum_x = 0 ;
25: double sum_y = 0 ;
26: double sum_xy = 0 ;
27: double sum_x_2 = 0 ;
28: double sum_y_2 = 0 ;
29: double sum_x_y_2 = 0 ;
30: double sum_y_x_2 = 0 ;
31: double sum_x_3 = 0 ;
32: double sum_y_3 = 0 ;
33: double temp_x_2 = 0 ;
34: double temp_y_2 = 0 ;
35: double P , Q ,R ,T , W ;
36: printf("请输入点的坐标,中间以空格间隔:/n");
37: for(int i=0;i<n;++i) //input n point location
38: {
39: scanf("%f %f",&point[i].x,&point[i].y);
40: sum_x += point[i].x;
41: sum_y += point[i].y;
42: sum_xy +=point[i].x*point[i].y ;
43: temp_x_2 = point[i].x*point[i].x ;
44: temp_y_2 = point[i].y*point[i].y ;
45: sum_x_2 += temp_x_2 ;
46: sum_y_2 += temp_y_2 ;
47: sum_x_y_2 += temp_y_2*point[i].x ;
48: sum_y_x_2 += temp_x_2*point[i].y ;
49: sum_x_3 += temp_x_2*point[i].x ;
50: sum_y_3 += temp_y_2*point[i].y ;
51: }
52: P = n*sum_x_2 - sum_x*sum_x ;
53: Q = n*sum_xy - sum_x*sum_y ;
54: R = n*(sum_x_3+sum_x_y_2)-(sum_x_2+sum_y_2)*sum_x ;
55: T = n*sum_y_2 - sum_y*sum_y ;
56: W = n*(sum_y_x_2+sum_y_3)-(sum_x_2+sum_y_2)*sum_y ;
57: if(abs(Q*Q-P*T)<eps)
58: {
59: printf("ERROE/n");
60: goto state;
61: }
62: else
63: {
64: double A = (W*Q-R*T)/(P*T-Q*Q);
65: double B = (P*W-Q*R)/(Q*Q-P*T);
66: double C = -(sum_x_2+sum_y_2+A*sum_x+B*sum_y)/n ;
67: double r = 0.50*sqrt(A*A+B*B-4*C);
68: printf("圆心坐标 :");
69: printf("(%f,%f)/n",A/2,B/2);
70: printf("圆半径 : ");
71: printf("%f/n",r) ;
72: }
73: system("pause");
74: return 0 ;
75: }
1: #include<cstdio>
2: #include<cstdlib>
3: #include<cmath>
4: #define eps 1e-8
5: #define max 1000000
6: struct Point
7: {
8: float x ;
9: float y ;
10: };
11: Point point[max];
12: using namespace std ;
14: {
15: int n = 0 ;
16: state:
17: printf("请输入点的个数(上限不要超过1000,000):/n");
18: scanf("%d",&n) ; //input the number of points
19: while(n<3)
20: {
21: printf("输入点个数小于三个,无法确定唯一圆,请重新输入!/n");
22: scanf("%d",&n);
23: }
24: double sum_x = 0 ;
25: double sum_y = 0 ;
26: double sum_xy = 0 ;
27: double sum_x_2 = 0 ;
28: double sum_y_2 = 0 ;
29: double sum_x_y_2 = 0 ;
30: double sum_y_x_2 = 0 ;
31: double sum_x_3 = 0 ;
32: double sum_y_3 = 0 ;
33: double temp_x_2 = 0 ;
34: double temp_y_2 = 0 ;
35: double P , Q ,R ,T , W ;
36: printf("请输入点的坐标,中间以空格间隔:/n");
37: for(int i=0;i<n;++i) //input n point location
38: {
39: scanf("%f %f",&point[i].x,&point[i].y);
40: sum_x += point[i].x;
41: sum_y += point[i].y;
42: sum_xy +=point[i].x*point[i].y ;
43: temp_x_2 = point[i].x*point[i].x ;
44: temp_y_2 = point[i].y*point[i].y ;
45: sum_x_2 += temp_x_2 ;
46: sum_y_2 += temp_y_2 ;
47: sum_x_y_2 += temp_y_2*point[i].x ;
48: sum_y_x_2 += temp_x_2*point[i].y ;
49: sum_x_3 += temp_x_2*point[i].x ;
50: sum_y_3 += temp_y_2*point[i].y ;
51: }
52: P = n*sum_x_2 - sum_x*sum_x ;
53: Q = n*sum_xy - sum_x*sum_y ;
54: R = n*(sum_x_3+sum_x_y_2)-(sum_x_2+sum_y_2)*sum_x ;
55: T = n*sum_y_2 - sum_y*sum_y ;
56: W = n*(sum_y_x_2+sum_y_3)-(sum_x_2+sum_y_2)*sum_y ;
57: if(abs(Q*Q-P*T)<eps)
58: {
59: printf("ERROE/n");
60: goto state;
61: }
62: else
63: {
64: double A = (W*Q-R*T)/(P*T-Q*Q);
65: double B = (P*W-Q*R)/(Q*Q-P*T);
66: double C = -(sum_x_2+sum_y_2+A*sum_x+B*sum_y)/n ;
67: double r = 0.50*sqrt(A*A+B*B-4*C);
68: printf("圆心坐标 :");
69: printf("(%f,%f)/n",A/2,B/2);
70: printf("圆半径 : ");
71: printf("%f/n",r) ;
72: }
73: system("pause");
74: return 0 ;
75: }