/*
求四面体的体积
已知任意四面体(三棱锥)六条棱的棱长,求其体积。
不妨记同一顶点引出的三条棱棱长的平方分别为a,b,c,它们的对棱棱长的平方分别为d,e,f,则四面体的体积V满足:
V=sqrt[ad(b+c+e+f-a-d)+be(a+c+d+f-b-e)+cf(a+b+d+e-c-f)-abf-bcd-cae-def)]/12
(注意:这里的abcdef都是边长的平方)
首先记根号外的系数1/12
其次记根号里任何字母的次数都是2
然后根号内由两部分组成
前面三个,括号分别为【对棱平方积】乘以【其他四边平方和减去这两边的平方和】
最后四个,分别为四面体四个面三角形【三边平方积】。
*/
#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()
{
int t;
cin>>t;
while(t--)
{
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;
}
求四面体的体积
已知任意四面体(三棱锥)六条棱的棱长,求其体积。
不妨记同一顶点引出的三条棱棱长的平方分别为a,b,c,它们的对棱棱长的平方分别为d,e,f,则四面体的体积V满足:
V=sqrt[ad(b+c+e+f-a-d)+be(a+c+d+f-b-e)+cf(a+b+d+e-c-f)-abf-bcd-cae-def)]/12
(注意:这里的abcdef都是边长的平方)
首先记根号外的系数1/12
其次记根号里任何字母的次数都是2
然后根号内由两部分组成
前面三个,括号分别为【对棱平方积】乘以【其他四边平方和减去这两边的平方和】
最后四个,分别为四面体四个面三角形【三边平方积】。
*/
#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()
{
int t;
cin>>t;
while(t--)
{
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;
}