四面体

前置知识:

  • 勾股定理
  • 海伦公式
  • 空间向量
  • 三棱锥体积公式

推理

我们知道四面体即是三棱锥
通过 底*高*即可得到体积
我们用前3个点构成的面当作底面
用海伦公式求底面积,调用
用空间向量求高,首先求出底面的法向量,在底面上随便找一个点连向第4个点构成向量,求此向量在法向量上的投影即是高

参考代码

#include<bits/stdc++.h>
using namespace std;
struct Vector{
    int x[5];
}t[10],a,b,c,d;
double h;
int main()
{
    for(int i=0;i<4;i++)
        for(int j=0;j<3;j++)
            cin>>t[i].x[j];
    for(int i=0;i<3;i++){
        a.x[i]=t[1].x[i]-t[0].x[i];
        b.x[i]=t[2].x[i]-t[0].x[i];
        d.x[i]=t[3].x[i]-t[0].x[i];
    }
    for(int i=0;i<3;i++)
        c.x[i]=a.x[(i+1)%3]*b.x[(i+2)%3]-b.x[(i+1)%3]*a.x[(i+2)%3];
    int cd=0;
    for(int i=0;i<3;i++)
        cd+=c.x[i]*d.x[i];
    h=fabs(cd/sqrt(c.x[0]*c.x[0]+c.x[1]*c.x[1]+c.x[2]*c.x[2]));
    double k[4],p,s;
    for(int i=0;i<3;i++)
        k[i]=sqrt((t[i].x[0]-t[(i+1)%3].x[0])*(t[i].x[0]-t[(i+1)%3].x[0])+(t[i].x[1]-t[(i+1)%3].x[1])*(t[i].x[1]-t[(i+1)%3].x[1])+(t[i].x[2]-t[(i+1)%3].x[2])*(t[i].x[2]-t[(i+1)%3].x[2]));
    p=(k[0]+k[1]+k[2])/2;
    s=sqrt(p*(p-k[0])*(p-k[1])*(p-k[2]));
    printf("%.1lf\n",s*h/3);
    cout<<s<<"\n";
    cout<<h<<"\n";
    return 0;
}
全部评论

相关推荐

04-15 13:42
四川大学 Java
蹲蹲offerrr:快投吧,有点晚现在
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务