算法提高 12-1三角形

算法提高 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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值