算法提高 12-1三角形
时间限制:1.0s 内存限制:256.0MB
问题描述
为二维空间中的点设计一个结构体,在此基础上为三角形设计一个结构体。分别设计独立的函数计算三角形的周长、面积、中心和重心。输入三个点,输出这三个点构成的三角形的周长、面积、外心和重心。结果保留小数点后2位数字。
样例输出
与上面的样例输入对应的输出。
例:
例:
数据规模和约定
输入数据中每一个数的范围。
例:doule型表示数据。
例:doule型表示数据。
作者注释:本题不难,只是计算公式要知道——上百度查一下外心,重心,中心的公式咯。
代码如下:
1 /* 2 求三角形的外接圆心坐标:O(x,y) 3 三角形:a(x1,y1) b(x2,y2) c(x3,y3) 4 满足:A1*x+B1y=C1;A2*x+B2y=C2; 5 根据克拉默法则: 6 x=((C1*B2)-(C2*B1))/((A1*B2)-(A2*B1)); 7 y=((A1*C2)-(A2*C1))/((A1*B2)-(A2*B1)); 8 */ 9 /* 10 求三角形的外心的坐标: 11 满足:A1*x+B1y=C1;A2*x+B2y=C2; 12 根据克拉默法则: 13 x=((C1*B2)-(C2*B1))/((A1*B2)-(A2*B1)); 14 y=((A1*C2)-(A2*C1))/((A1*B2)-(A2*B1)); 15 */ 16 #include<stdio.h> 17 #include<math.h> 18 #include<string.h> 19 int x[4],y[4]; 20 void zc(){ 21 double a=(x[1]-x[2])*(x[1]-x[2])+(y[1]-y[2])*(y[1]-y[2]); 22 double b=(x[2]-x[3])*(x[2]-x[3])+(y[2]-y[3])*(y[2]-y[3]); 23 double c=(x[3]-x[1])*(x[3]-x[1])+(y[3]-y[1])*(y[3]-y[1]); 24 printf("%.2lf ",sqrt(a)+sqrt(b)+sqrt(c)); 25 } 26 void mj(){ 27 double a=(x[1]-x[2])*(x[1]-x[2])+(y[1]-y[2])*(y[1]-y[2]); 28 double b=(x[2]-x[3])*(x[2]-x[3])+(y[2]-y[3])*(y[2]-y[3]); 29 double c=(x[3]-x[1])*(x[3]-x[1])+(y[3]-y[1])*(y[3]-y[1]); 30 a=sqrt(a); 31 b=sqrt(b); 32 c=sqrt(c); 33 double s=(a+b+c)/2; 34 s=s*(s-a)*(s-b)*(s-c); 35 printf("%.2lf ",sqrt(s)); 36 } 37 void waixin(double &a,double &b){ 38 double A1=2*(x[2]-x[1]); 39 double B1=2*(y[2]-y[1]); 40 double C1=(x[2]*x[2]+y[2]*y[2]-x[1]*x[1]-y[1]*y[1]); 41 double A2=2*(x[3]-x[2]); 42 double B2=2*(y[3]-y[2]); 43 double C2=x[3]*x[3]+y[3]*y[3]-x[2]*x[2]-y[2]*y[2]; 44 45 a=((C1*B2)-(C2*B1))/((A1*B2)-(A2*B1)); 46 b=((A1*C2)-(A2*C1))/((A1*B2)-(A2*B1)); 47 } 48 void zhongxin(double &c,double &d){ 49 c=(x[1]+x[2]+x[3])/3.0; 50 d=(y[1]+y[2]+y[3])/3.0; 51 } 52 main(){ 53 for(int i=1;i<=3;i++){ 54 scanf("%ld%ld",&x[i],&y[i]); 55 } 56 zc(); 57 mj(); 58 double a,b; 59 waixin(a,b); 60 printf("%.2lf %.2lf ",a,b); 61 double c,d; 62 zhongxin(c,d); 63 printf("%.2lf %.2lf",c,d); 64 }