您的位置:首页 > 其它

蓝桥杯算法提高 12-1三角形

2017-04-07 16:02 393 查看


纯数学题,外心的公式是在网上百度的,实在是不记得了。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
struct node
{
int x,y;
}p[4];

double edge1;
double edge2;
double edge3;
double per;

void perimeter()
{
edge1=double(sqrt((p[0].x-p[1].x)*(p[0].x-p[1].x)+(p[0].y-p[1].y)*(p[0].y-p[1].y)));
edge2=double(sqrt((p[0].x-p[2].x)*(p[0].x-p[2].x)+(p[0].y-p[2].y)*(p[0].y-p[2].y)));
edge3=double(sqrt((p[1].x-p[2].x)*(p[1].x-p[2].x)+(p[1].y-p[2].y)*(p[1].y-p[2].y)));
per=edge1+edge2+edge3;
printf("%.2lf\n",per);
}
void area()
{
double area;
double s=0.0;
s=double((1.0/2.0)*per);
area=double(sqrt(s*(s-edge1)*(s-edge2)*(s-edge3)));
printf("%.2lf\n",area);
}
void barycenter()
{
double x1=0.0,y1=0.0;
for(int i=0;i<3;i++)
{
x1=x1+p[i].x;
y1=y1+p[i].y;
}
x1=(double)x1/3;
y1=(double)y1/3;
printf("%.2lf ",x1);
printf("%.2lf\n",y1);
}
void circumcenter()
{
double x1,y1;
x1=(1.0/2.0)*((p[0].x*p[0].x+p[0].y*p[0].y)*(p[1].y-p[2].y)+(p[1].x*p[1].x+p[1].y*p[1].y)*(p[2].y-p[0].y)+(p[2].x*p[2].x+p[2].y*p[2].y)*(p[0].y-p[1].y))/(p[0].x*(p[1].y-p[2].y)+p[1].x*(p[2].y-p[0].y)+p[2].x*(p[0].y-p[1].y));
y1=(1.0/2.0)*((p[0].x*p[0].x+p[0].y*p[0].y)*(p[1].x-p[2].x)+(p[1].x*p[1].x+p[1].y*p[1].y)*(p[2].x-p[0].x)+(p[2].x*p[2].x+p[2].y*p[2].y)*(p[0].x-p[1].x))/(p[0].y*(p[1].x-p[2].x)+p[1].y*(p[2].x-p[0].x)+p[2].y*(p[0].x-p[1].x));
printf("%.2lf ",x1);
printf("%.2lf\n",y1);
}
int main()
{
for(int i=0;i<3;i++)
cin>>p[i].x>>p[i].y;
perimeter();
area();
circumcenter();
barycenter();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: