算法提高 12-1三角形

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

猜你喜欢

转载自blog.csdn.net/qq_42835910/article/details/84993610