算法提高 12-1三角形

来源:互联网 发布:买个域名多少钱 编辑:程序博客网 时间:2024/06/02 01:44
算法提高 12-1三角形  
时间限制:1.0s   内存限制:256.0MB
    
问题描述
  为二维空间中的点设计一个结构体,在此基础上为三角形设计一个结构体。分别设计独立的函数计算三角形的周长、面积、中心和重心。输入三个点,输出这三个点构成的三角形的周长、面积、外心和重心。结果保留小数点后2位数字。
样例输出
与上面的样例输入对应的输出。
例:
数据规模和约定
  输入数据中每一个数的范围。
  例:doule型表示数据。
#include<iostream>#include<iomanip>#include<math.h>using namespace std;double a1,a2,a3,b1,b2,b3,A1,A2,B1,B2,C1,C2,x,y,c,d;double Triangle_Perimeter()//三角形周长{double a,b,c;a= (a1-a2)*(a1-a2)+(b1-b2)*(b1-b2) ;b= (a2-a3)*(a2-a3)+(b2-b3)*(b2-b3) ;c=(a3-a1)*(a3-a1)+(b3-b1)*(b3-b1) ;return sqrt(a)+sqrt(b)+sqrt(c);}double Triangle_Area()//三角形面积(已知三角形三点坐标算法){double a,b,c;a=sqrt( (a1-a2)*(a1-a2)+(b1-b2)*(b1-b2) );b=sqrt( (a2-a3)*(a2-a3)+(b2-b3)*(b2-b3) );c=sqrt( (a3-a1)*(a3-a1)+(b3-b1)*(b3-b1) );double m;m=(a+b+c)/2;m=m*(m-a)*(m-b)*(m-c);return sqrt(m);}void Excenter()//外心算法-外心到三角形任意一点的距离都相同性质+克拉默法则(行列式求解){//(x-a1)^2+(y-b1)^2=(x-a2)^2+(y-b2)^2//化简:2(a2-a1)x+2(b2-b1)y=a2^2+b2^2-a1^2-b1^2 ①//同理也有:2(a3-a1)x+2(b3-b1)y=a3^2+b3^2-a1^2-b1^2 ②/*两个式子简化:A1*x+B1*y=C1 ①,A2*x+B2*y=C2 ②转型化为行列式:[A1 B1] 记为D.计算D=A1*B2-B1*A2       [A2 B2]  根据克拉默法则:x=D1/D,D1=[C1 B1] =C1*B2-B1*C2 [用C1,C2替代D的第一列数变为D1] [C2 B2]   y=D2/D,D2=[A1 C1]=A1*C2-C1*A2             [A2 C2]*/A1=2*(a2-a1);B1=2*(b2-b1);A2=2*(a3-a1);B2=2*(b3-b1);C1=a2*a2+b2*b2-a1*a1-b1*b1;C2=a3*a3+b3*b3-a1*a1-b1*b1;x=(C1*B2-B1*C2)/(A1*B2-B1*A2);y=(A1*C2-C1*A2)/(A1*B2-B1*A2);}void Focus(){c=(a1+a2+a3)/3.0;d=(b1+b2+b3)/3.0;}int main(){cin>>a1>>b1>>a2>>b2>>a3>>b3;cout<<setiosflags(ios::fixed)<<setiosflags(ios::right)<<setprecision(2);cout<<Triangle_Perimeter()<<endl;cout<<Triangle_Area()<<endl;Excenter();cout<<x<<' '<<y<<endl;Focus();cout<<c<<' '<<d<<endl;return 0;}