欧拉体积公式:
/***************************************************
方法一:
欧拉体积公式用行列式求,见上图;
***************************************************/
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<cmath>
using namespace std;
double p,q,r,m,n,l;
double v[3][3];
double det_cal()//行列式计算
{
double v1=v[0][0]*v[1][1]*v[2][2];
double v2=v[0][1]*v[1][2]*v[2][0];
double v3=v[1][0]*v[2][1]*v[0][2];
double v4=v[0][1]*v[1][0]*v[2][2];
double v5=v[2][0]*v[1][1]*v[0][2];
double v6=v[0][0]*v[2][1]*v[1][2];
return (v1+v2+v3)-(v4+v5+v6);
}
int main()
{
double vs;//体积平方
while(cin>>p>>q>>r>>n>>m>>l)
{
v[0][0]=p*p;//对行列式赋值
v[0][1]=v[1][0]=(p*p+q*q-n*n)/2;
v[0][2]=v[2][0]=(p*p+r*r-m*m)/2;
v[1][1]=q*q;
v[1][2]=v[2][1]=(q*q+r*r-l*l)/2;
v[2][2]=r*r;
vs=det_cal();
printf("%.4lf\n",sqrt(vs/36));
}
return 0;
}
/******************************************************
方法二:
四面体ABCD中:
AD=a, AB=c, AC=b,;
∠CAD=∠ga, ∠CAB=∠gb, ∠DAB=∠gc;
∠gw=(∠ga+∠gb+∠gc)/2;
则体积公式为:
V=sqrt(sin∠gw*sin∠(gw-ga)*sin∠(gw-gb)*sin∠(gw-gc))*a*b*c/3;
*******************************************************/
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<cmath>
using namespace std;
double angle(double AB, double AC, double BC)//triangle ABC 的angleA, rad//求角度
{
return acos((AC*AC+AB*AB-BC*BC)/(2*AB*AC));
}
int main()
{
double ab, ac, ad, bc, bd, cd;
double a, b, c, ga, gb, gc, gw;
while(~scanf("%lf%lf%lf%lf%lf%lf", &ab, &ac, &ad, &bc, &bd, &cd))
{
a=ad;
b=ac;
c=ab;
ga=angle(ac, ad, cd);
gb=angle(ac, ab, bc);
gc=angle(ad, ab, bd);
gw=(ga+gb+gc)/2;
printf("%.4lf\n", sqrt(sin(gw)*sin(gw-ga)*sin(gw-gb)*sin(gw-gc))*a*b*c/3);
}
return 0;
}