1. 程式人生 > >演算法提高 12-1三角形

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