swustoj搭帐篷说..(0330)
来源:互联网 发布:excel找重复数据 编辑:程序博客网 时间:2024/04/27 13:48
青海玉树“4.14”地震发生后,灾民展开自救.因为物资紧缺,有些帐篷便被搭建成底座是三角形的四面体。而要最大限度的让灾民有遮风避雨之地,只能暂时按人数来平均支配空间.现只知道帐篷的棱长,想请你帮忙计算出这种帐篷的体积. 例如:
多组输入,每组包含6个不大于1000的正整数,分别代表帐篷ABCD的六条棱AB,AC,AD,BC,BD,CD的长度.
该帐篷的体积,精确到小数点后3位.
解题思路:网上有欧拉公式求四面体体积的详细解题报告。很认真的看了,发现确实很好。下面我自己推导一边吧,美丽的数学啊~巨弱项。X:代表叉乘,*代表点乘;
给定四个点O(0,0,0),A(Xa,Ya,Ca),B(Xb,Yb,Yc),C(Za,Zb,Zc);
V=1/6*(OA x OB)*OC =|Xb,Yb,Yb |
WHY?:
OA x OB = 2*OAB;
V = 1/3*OAB*OC*sin(C);
代入即V=1/6*(OA x OB)*OC
V2 =1/36*|Xb,Yb,Yb |*|Ya,Yb,Yc |;
然后行列式相乘,不阐述了;
会得出两个基本项 Xa*Xa+Ya*Ya+Za*Za=|OA|2;
这样将坐标的关系变换为边的关系;
直接套公式就可以求解了;
这里要注意的就是对应的边不可以乱换,用来旋转是可以的,兑换的话就会有问题;
OA,OB,OC三遍可以旋转,不可兑换同理对于AB,AC,BC;
#include<iostream>#include<cmath>#include<stdio.h>#include<math.h>using namespace std;double P(double a, double b, double c, double d, double e) { return a*(b*c - d*e); }int main(){double OA, OB, OC, AB, BC, CA;while (scanf("%lf %lf %lf %lf %lf %lf", &OA, &OB, &OC, &AB, &CA, &BC) != EOF){OA *= OA; OB *= OB; OC *= OC; AB *= AB; CA *= CA; BC *= BC;double ans = 0;ans += P(OA, OB, OC, (OB + OC - BC) / 2., (OB + OC - BC) / 2.);ans -= P((OA + OB - AB) / 2., (OA + OB - AB) / 2., OC, (OA + OC - CA) / 2., (OB + OC - BC) / 2.);ans += P((OA + OC - CA) / 2., (OA + OB - AB) / 2., (OB + OC - BC) / 2., OB, (OA + OC - CA) / 2.);printf("%.3lf\n", sqrt(ans / 36));}return 0;}
- swustoj搭帐篷说..(0330)
- swustoj---1091
- swustoj(667)
- 要睡帐篷了!
- 帐篷的安装
- 骆驼与帐篷的故事
- 帐篷大会的寒酸装备
- swustoj---254翻煎饼
- swustoj----142猴子报数
- swustoj---700Delete Numbers
- 翻煎饼 swustoj 254
- swustOJ 1378 Best Grass
- swustOJ 1107 单向公路
- swustOJ 1615寻宝
- swustoj 143 汉诺塔问题
- swustoj---251邮票
- swustoj Locker doors(0480)
- swustoj沙漠储油点
- 云计算的那些事之存储虚拟化
- 例题 9-12 工人的请愿书 UVa 12186
- NYOJ 489 最大流 Dinic 算法
- puts函数的使用
- php计划任务(定时执行函数)
- swustoj搭帐篷说..(0330)
- 15个顶级多线程面试题及答案
- bzoj1433: [ZJOI2009]假期的宿舍
- Codeforces gym 101350F 想法
- C语言学习历程——Training02位运算02
- UVA 7503
- jdbc
- gcd变形
- 机器学习笔记(2)-决策树