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