hdu 1411 校慶神祕建築 (尤拉四面體公式)
阿新 • • 發佈:2018-12-15
題目連結:哆啦A夢傳送門
參考部落格:
https://www.cnblogs.com/dgsrz/articles/2590309.html
1,建議x,y,z直角座標系。設A、B、C少拿點的座標分別為(a1,b,1,c1),(a2,b2,c2),(a3,b3,c3),四面體O-ABC的六條稜長分別為l,m,n,p,q,r;
2,四面體的體積為
表示的面積,再根據叉積公式 ,所以就很容易得到上面的向量公式了,
兩向量叉積可以用行列式表示,詳情參考維基:我愛維基
將這個式子平方後得到:
3,根據向量數量積 的座標表示式及數量積的定義得
又根據餘弦定理得,這裡用的是點積,不同於上面的叉積,為什麼我們會知道這裡用的是點積呢?很簡單,我們從表示式就很容易知道了。
4,將上述的式子帶入(1),就得到了傳說中的尤拉四面體公式
最後結果就出來了,簡單的解個行列式。
程式碼:
#include<cstdio> #include<algorithm> #include<cstring> #include<cmath> using namespace std; ///AB,AC,AD,BC,BD,CD。 int main() { double p,q,r,m,n,l; ///注意對應儲存邊 while(~scanf("%lf%lf%lf%lf%lf%lf",&n,&m,&p,&l,&q,&r)) { double tmp1=(p*p+q*q-n*n)/2.0; double tmp2=(p*p+r*r-m*m)/2.0; double tmp3=(q*q+r*r-l*l)/2.0; double volume=p*p*q*q*r*r+tmp1*tmp3*tmp2*2; volume=volume-(tmp2*tmp2*q*q+tmp3*tmp3*p*p+r*r*tmp1*tmp1); printf("%.4f\n",sqrt(volume)/6.0); } return 0; }
我的標籤:做個有情懷的程式設計師。