http://acm.hdu.edu.cn/showproblem.php?pid=1411
题意:求四面体体积。
思路:海伦公式,利用三边长求面积,百度百科上就有。
接着是求体积公式,这里有个简单的:(参考大牛)
这里的三个面角就是一个顶点所对应的三个角,这是一个可以通过角度和边长求体积的公式。角度我们可以根据S=1/2*a*b*sinc变形得出,这样就要知道面积,而面积正是海伦公式可以求出的。
其实还有一种做法,有空看看,主要是现在看不懂T T
哎,想当年线代考过100,而现在连行列式都看不懂。。。。
有句古话叫啥来着,三十年河东,三十年河西= =
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <math.h>
using namespace std;
const double PI = 3.1415926;
double get_angle(double x, double y, double z)
{
double p, S, angle;
p = (x+y+z)/2;
S = sqrt(p*(p-x)*(p-y)*(p-z));
angle = asin((2*S)/(x*y));
if(z*z > x*x+y*y) angle = PI-angle;
return angle;
}
int main()
{
// freopen("in.txt", "r", stdin);
double a, b, c, d, e, f;
double an1, an2, an3, w, V;
while(~scanf("%lf%lf%lf%lf%lf%lf", &a, &b, &c, &d, &e, &f))
{
an1 = get_angle(a, b, d);
an2 = get_angle(b, c, f);
an3 = get_angle(a, c, e);
w = (an1+an2+an3)/2;
V = (1.0/3)*a*b*c*sqrt(sin(w)*sin(w-an1)*sin(w-an2)*sin(w-an3));
printf("%.4lf\n", V);
}
return 0;
}