您的位置:首页 > 其它

算法提高 12-1三角形

2017-08-07 19:49 253 查看
算法提高 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 Triangl
4000
e_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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: