算法提高 12-1三角形
时间限制:1.0s 内存限制:256.0MB
问题描述
为二维空间中的点设计一个结构体,在此基础上为三角形设计一个结构体。分别设计独立的函数计算三角形的周长、面积、中心和重心。输入三个点,输出这三个点构成的三角形的周长、面积、外心和重心。结果保留小数点后2位数字。
样例输出
与上面的样例输入对应的输出。
例:
数据规模和约定
输入数据中每一个数的范围。
例:doule型表示数据
#include <iostream>
#include <math.h>
#include <cstdio>
using namespace std;
typedef struct Dot{
double x,y;
}D;
typedef struct Triangle{
D d[3];
double l[3];
}T;
int main(int argc, char *argv[]) {
T t;
for(int i=0;i<3;i++){
cin>>t.d[i].x>>t.d[i].y;
}
double len=0;
for(int i=0;i<2;i++){
t.l[i]=sqrt(pow(t.d[i].x-t.d[i+1].x,2)+pow(t.d[i].y-t.d[i+1].y,2));
len+=t.l[i];
}
t.l[2]=sqrt(pow(t.d[2].x-t.d[0].x,2)+pow(t.d[2].y-t.d[0].y,2));
len+=t.l[2];
double square=len/2;
D wai;
wai.x=0;
wai.y=0;
for(int i=0;i<3;i++){
square*=(len/2-t.l[i]);
wai.x+=t.d[i].x;
wai.y+=t.d[i].y;
}
square=sqrt(square);
wai.x/=3;
wai.y/=3;
double a1,b1,c1,a2,b2,c2;
D core;
a1=2*(t.d[1].x-t.d[0].x);
b1=2*(t.d[1].y-t.d[0].y);
c1=pow(t.d[1].x,2)+pow(t.d[1].y,2)-pow(t.d[0].x,2)-pow(t.d[0].y,2);
a2=2*(t.d[2].x-t.d[1].x);
b2=2*(t.d[2].y-t.d[1].y);
c2=pow(t.d[2].x,2)+pow(t.d[2].y,2)-pow(t.d[1].x,2)-pow(t.d[1].y,2);
core.x=((c1*b2)-(c2*b1))/((a1*b2)-(a2*b1));
core.y=((a1*c2)-(a2*c1))/((a1*b2)-(a2*b1));
printf("%.2lf\n%.2lf\n",len,square);
printf("%.2lf %.2lf\n",core.x,core.y);
printf("%.2lf %.2lf\n",wai.x,wai.y);
return 0;
}