求四面体体积
溪染:喂,叁秋,我这里有空间上4个点的坐标,你能帮我求出他们构成四面体的体积吗?
叁秋:我试试!
叁秋发现自己不会算,直接说自己不会又觉得很没面子,于是她找到了你。
输入描述:
共四行,每行输入3个参数,x,y,z(−50≤x,y,z≤50)表示点的坐标,输入的坐标均为整数。
输入保证,四个点的坐标可以构成四面体。(不会出现四点共面的情况)
输出描述:
仅一行一个实数,表示构成四面体的体积,你的答案正确,当且仅当你的答案与实际答案之间的误差不大于10e−4。
示例2
输出
复制2189.1666666666666667
#include<iostream> #include<algorithm> #include<string.h> #include<string> #include<stdio.h> #include<math.h> #define ll long long #define INF 2147483647 #define N 50 #define PI acos(-1) #define EPS 1e-8 using namespace std; struct point { double x,y,z; } p[5]; double line2(point a,point b) { return ((a.x-b.x)*(a.x-b.x))+((a.y-b.y)*(a.y-b.y))+((a.z-b.z)*(a.z-b.z)); } int main() { for(int i=1; i<=4; i++) cin>>p[i].x>>p[i].y>>p[i].z; double p12=line2(p[1],p[2]),p13=line2(p[1],p[3]),p14=line2(p[1],p[4]); double p23=line2(p[2],p[3]),p24=line2(p[2],p[4]),p34=line2(p[3],p[4]); double res1=p12*p34*(p13+p14+p23+p24-p12-p34); double res2=p14*p23*(p12+p13+p24+p34-p14-p23); double res3=p13*p24*(p12+p14+p23+p34-p13-p24); double res4=(p12*p13*p23)+(p13*p14*p34)+(p12*p14*p24)+(p24*p34*p23); double v=sqrt(res1+res2+res3-res4)/12; printf("%.2lf\n",v); return 0; }