Description
给出三维空间上的三个点,计算以这三个点为顶点的三角形的面积。
Input
输入的第一行包含一个整数T (T > 0),表示一共有T组测试数据。
每组数据占三行,每行各描述了一个点的坐标。点的坐标会以x y z的形式给出,表示这个点的坐标为(x, y, z),其中x, y, z均为[-100, 100]范围内的浮点数。
Output
对于每组测试数据,输出三角形的面积(和标准答案的误差不超过10-6即可)。
Sample Input
2
0 1 0
1 0 0
0 0 0
0 0.0 1.00
1.0 0.00 0
0.00 1.0 0
Sample Output
0.50
0.8660254
AC Code
#include<iostream>
#include<string>
#include<cmath>
#include<iomanip>
using namespace std;
const int MAXN=10000+10;
const double EPS=1e-6;
class Point{
public:
double x,y,z;
Point(){}
Point(int _x, int _y, int _z):x(_x),y(_y),z(_z){}
double getDis(Point &a){
return sqrt(pow(x-a.x,2)+pow(y-a.y,2)+pow(z-a.z,2));
}
};
int main(){
int t;
scanf("%d", &t);
while(t--){
Point p[3];
for(int i=0; i<3; ++i){
cin>>p[i].x>>p[i].y>>p[i].z;
}
double a,b,c;
a=p[0].getDis(p[1]);
b=p[0].getDis(p[2]);
c=p[1].getDis(p[2]);
double s=(a+b+c)/2.0;
printf("%.16lf\n",sqrt(s*(s-a)*(s-b)*(s-c)));
}
}