四面体
前置知识:
- 勾股定理
- 海伦公式
- 空间向量
- 三棱锥体积公式
推理
我们知道四面体即是三棱锥
通过 底*高*即可得到体积
我们用前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;
}