已知六条边的边长,求四面体体积

Problem Description

杭州电子科技大学即将迎来50周年的校庆,作为校庆委员会成员的我被上级要求设计一座神秘的建筑物来迎合校庆,因此我苦思冥想了一个月,终于设计出了一套方案,这座建筑物有点象古老埃及的金字塔,不过这个神秘建筑的根基是三角形的而不是矩形的,从数学的专业角度来讲,它是四面体。当我打算上交我的设计图纸的时候发现,我不知道怎么计算这个神秘建筑的体积(我知道这座建筑的各边的尺寸),于是我找来了聪明的你来帮助我解决这个难题。

Input

输入文件包含6个不超过1000的实数,每个数之间用空格隔开。每个数代表金字塔ABCD的一条棱边长度,棱边排序如下:AB,AC,AD,BC,BD,CD。

Output

输出数据应是一个实数,表示金字塔的体积,精确到4位小数。

Sample Input

2 2 2 2 2 2

Sample Output

0.9428

公式: 欧拉四面体公式,用来求三棱椎的体积。 V=sqrt((4*a*a*b*b*c*c-a*a*(b*b+c*c-m*m)*(b*b+c*c-m*m)-b*b*(c*c+a*a-n*n)*(c*c+a*a-n*n)-c*c*(a*a+b*b-l*l)*(a*a+b*b-l*l)+(a*a+b*b-l*l)*(b*b+c*c-m*m)*(c*c+a*a-n*n)))/12;

 1 #include <stdio.h>
 2 #include <math.h>
 3
 4 int main(){
 5     double a;
 6     double b;
 7     double c;
 8     double m;
 9     double n;
10     double l;
11     double V;
12
13     while(scanf("%lf%lf%lf%lf%lf%lf",&a,&c,&b,&n,&l,&m)!=EOF){
14         V=(double)sqrt((4.0*a*a*b*b*c*c-a*a*(b*b+c*c-m*m)*(b*b+c*c-m*m)-b*b*(c*c+a*a-n*n)*(c*c+a*a-n*n)-c*c*(a*a+b*b-l*l)*(a*a+b*b-l*l)+(a*a+b*b-l*l)*(b*b+c*c-m*m)*(c*c+a*a-n*n)))/12.0;
15
16         printf("%.4lf\n",V);
17     }
18
19
20     return 0;
21 }
 
时间: 2024-10-21 23:39:31

已知六条边的边长,求四面体体积的相关文章

二叉树遍历 已知中序后序遍历求前序遍历

已知中序.后序遍历求前序遍历的方法和已知前序.中序遍历求后序遍历的方法类似寻找根节点, 然后把中序遍历分成左右两个子树,有如此不断递归.很多文章介绍,不再累述. #include <iostream> #include <cstdio> #include <queue> #include <cstring> using namespace std; const int MAXN = 100; struct Node { char value; Node *l

数据库已知一条数据的ID,如何查询下条数据且ID不同

数据库已知一条数据的ID,如何查询下条数据且ID不同 首先ID已知一条,假如得到的为“1001”,下条的数据ID有可能相同,有可能不相同,如何查询?如果直接查询 “Select * from 表名 where 列名ID='1001'” 就只能查询本身的一条数据,添加“top 2”,也会只有一条数据.可不可以直接查询该数据以下的数据呢? “Select * from 表名 where 列名ID>'1001' Order By 列名ID” 这样就查询大于gaiID的数据,只要下一条,再加上“top

初中几何知识复习,已知直角三角形角度和邻边长求对边长

我相信在面对涉及到几何运算的程序问题时不需要打草稿直接敲出正确代码的大神是存在的,当然我目前不是. 最近遇到一个实际问题,需要用到初中学过的三角函数知识来解决,把问题用三角函数来描述就是在一个直角三角形中,已知一个角α的角度,和角α的邻边长a,求角α的对边长b. 立马想到肯定是用tan这个函数,虽然我忘记了叫什么,百度才想起来叫做正切函数,恩,算算我入行到现在6,7年时间,基本上都是使用atan2.tan这个函数貌似总共没用到三次,你还别不信,游戏前端开发大部分还是在写逻辑,写数学算法的时候不多

PAT A1020——已知后序中序遍历求层序遍历

1020 Tree Traversals Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and inorder traversal sequences, you are supposed to output the level order traversal sequence of the corresponding binary tree. Input

已知三个点坐标,求由这三个点构成的多边形的最大面积。

给出A(x0, y0) B(x1, y1) C(x2, y2) 1.求3边a,b,c 2. 先求外接圆半径.(一定存在) 海伦公式 + 正弦定理   得  R = a * b * c / (4 * S)   S = sqrt(q * (q - a) * (q - b) * (q -c));  q = (a + b + c) / 2; -----因为是正多边形. 那么只要求出一边与两半径围成的面积 * N 就好. 3. 余弦定理 求3个角. 求最大公约数就是  正多边形 每一份   最小的角度.

九度1078(二叉树已知先序和中序求后序)

题目链接:点击打开链接 解题思路: 很不错的一道题.用递归的方法求解.每次对两个序列进行递归,求得左子树的先序/中序,右子树的先序/中序.把树建好后调用递归输出后序即可 完整代码: #include <iostream> #include <cstdio> #include <string> using namespace std; string fir , mid; typedef struct Node { char ch; struct Node *l; stru

二叉树遍历 ——已知后序,中序求层序 A1020.(25)

若直接DFS递归求解,会栈溢出 #include <cstdio> #include <cstring> #include <queue> #include <algorithm> using namespace std; const int maxn=50; struct node{ int data; node* lchild; node* rchild; }; int pre[maxn],in[maxn],post[maxn];//先序,中序,后序 i

已知平行四边形的三个点求第四个点

Long time ago Alex created an interesting problem about parallelogram. The input data for this problem contained four integer points on the Cartesian plane, that defined the set of vertices of some non-degenerate (positive area) parallelogram. Points

已知一个3 * 3矩阵,求对角线元素的和,并且中间的只可以加一次

这道题有很多的方法,这是自己想出来的一个规律 例如 行    列   1  2 3 1 1  2  3 2 4  5  6 3 7  8  9 这里可以发现规律行和列的差 可以分辨出对角线的元素的位置,可以很快地找到 例如当   abs(行 - 列) != 1,才是对角线的元素,对于中间的元素只相加一次的话, 可以每次输入就相加.可以解决问题. 代码: #include <iostream> #include <cstdio> #include <cmath> usin