hdu 1411 校庆神秘建筑 (欧拉四面体公式)

本文详细解析了如何利用向量叉积和点积计算四面体的体积,通过建立直角坐标系并应用欧拉四面体公式,提供了一种计算任意四面体体积的有效方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接:哆啦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,四面体的体积为​​​​​​​

\large \frac{\underset{OA}{\rightarrow}\times \underset{OB}{\rightarrow}}{2}表示\large \Delta OAB的面积,再根据叉积公式 \large \underset{a}{\rightarrow}\times \underset{b}{\rightarrow}=\left | a \right |\left | b \right |*sin\o,所以就很容易得到上面的向量公式了,

两向量叉积可以用行列式表示,详情参考维基:我爱维基

 

将这个式子平方后得到:

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;
}

 

我的标签:做个有情怀的程序员。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值