一个四面体有四个点,分别为a = (x1, y1, z1), b = (x2, y2, z2), c = (x3, y3, z3), 以及d = (x4, y4, z4),计算该四面体的体积。

(1)四面体计算公式         

(2)三维空间的两点的点乘         

(3)三维空间的两点的叉乘         

方法一:定义一个Point类计算

先定义一个Point类来放点坐标,接着定义一个函数使用Point类型的对象作为参数传入,直接计算体积。

#include <iostream>
#include <math.h>using namespace std;// define a point class to store a point
class Point
{
public:double x;double y;double z;Point(double x, double y, double z);
};
// constructor
Point::Point(double x, double y, double z)
{this->x = x;this->y = y;this->z = z;
}// the function based on the given equation
double cal_volume(Point a, Point b, Point c, Point d)
{// a-dPoint p_ad(a.x-d.x, a.y-d.y, a.z-d.z);// b-dPoint p_bd(b.x-d.x, b.y- d.y, b.z-d.z);// c-dPoint p_cd(c.x-d.x, c.y-d.y, c.z-d.z);// (b-d)x(c-d)Point p_bd_cd(p_bd.y * p_cd.z - p_bd.z * p_cd.y, p_bd.z * p_cd.x - p_bd.x * p_cd.z, p_bd.x * p_cd.y - p_bd.y * p_cd.x);// final resultdouble res = abs(p_ad.x * p_bd_cd.x + p_ad.y * p_bd_cd.y + p_ad.z * p_bd_cd.z) / 6.0;return res;
}int main()
{// testPoint p1(0, 0, 0);Point p2(2, 0, 0);Point p3(0, 2, 0);Point p4(1, 1, 1);double v = cal_volume(p1, p2, p3, p4);cout << v << endl;
}

方法二:定义一个四面体类(tetrahedron),类方法计算

在Point类的基础上,再定义一个tetrahedron类(这个类拥有一个指向Point类型对象的指针,以及指针长度:此处为四面体,有四个点默认为四)。然后通过tetrahedron类对象计算体积,此处的计算体积方法是tetrahedron类的成员函数。

#include <iostream>
#include <vector>
using namespace std;class Point
{
public:double x;double y;double z;Point(double x, double y, double z);
};
// constructor
Point::Point(double x, double y, double z)
{this->x = x;this->y = y;this->z = z;
}class  tetrahedron
{
public:tetrahedron(Point *p, int num);double cal_volume();int num_p;Point *p;
};
// constructor
tetrahedron::tetrahedron(Point *tp, int num):num_p(num)
{for(int i = 0; i < this->num_p; i++){this->p[i] = Point(tp[i].x, tp[i].y, tp[i].z);}
}
// function to calculate volume
double  tetrahedron::cal_volume()
{Point p_ad(p[0].x-p[3].x, p[0].y-p[3].y, p[0].z-p[3].z);Point p_bd(p[1].x-p[3].x, p[1].y- p[3].y, p[1].z-p[3].z);Point p_cd(p[2].x-p[3].x, p[2].y-p[3].y, p[2].z-p[3].z);Point p_bd_cd(p_bd.y * p_cd.z - p_bd.z * p_cd.y, p_bd.z * p_cd.x - p_bd.x * p_cd.z, p_bd.x * p_cd.y - p_bd.y * p_cd.x);double res = abs(p_ad.x * p_bd_cd.x + p_ad.y * p_bd_cd.y + p_ad.z * p_bd_cd.z) / 6.0;return res;
}
int main()
{// testPoint p1(0, 0, 0);Point p2(2, 0, 0);Point p3(0, 2, 0);Point p4(1, 1, 1);Point *p = new Point(0, 0, 0);p[0]=p1;p[1]=p2;p[2]=p3;p[3]=p4;tetrahedron t(p, 4);double res = t.cal_volume();cout << res << endl;}

C++:使用类方法根据四点计算四面体体积相关推荐

  1. python计算长方体体积最简单代码_python处理DICOM并计算三维模型体积

    python处理DICOM并计算三维模型体积 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  python处理DICOM并计算三维模型体积.txt ] (友情提示 ...

  2. HDU2002 计算球体积【入门】

    计算球体积 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...

  3. 湖北民院OJ 计算球体体积

    计算球体体积 题目描述 编写一个计算球体体积的程序,其中球体半径从键盘输入. 参考公式v=4/3*pi*r^3.pi取3.14 . 输入描述 在一行中输入一个整数r,表示球体的半径. 输出描述 在一行 ...

  4. 2002 计算球体体积

    2002 计算球体体积 Problem Description 根据输入的半径值,计算球的体积. Input 输入数据有多组,每组占一行,每行包括一个实数,表示球的半径. Output 输出对应的球的 ...

  5. matlab蒙特卡罗方法求体积_实验二-蒙特卡罗方法计算三维体积

    班级: 学号: 姓名: 实验时间: 2014 年 月 日 实验 项目 实验二 蒙特卡罗方法计算三维体积 所属 课程 数学实验 实 验 目 的 了解蒙特卡罗方法的原理,掌握随机数使用技术. 实 验 内 ...

  6. C语言求圆锥体积的程序,计算圆锥体积c++程序.doc

    漳聘琴熟象寿休蒋崖烈滋资司诅眺泄瑟滔毯溶咱脑哼畅滁滓澈咽咯藕求丑财珍燥琳挽让稚福滚嚏崭访夯篡汤饱泡灭堂陡攀谢释蔓友扁独枕缸螺挽亚握欣置俭退肝刘岁协痛焕拥诉森砸逆惹墨虱把赴咒刺烤舆奄槽瓷速苫捅执仗樱孔滇 ...

  7. c#使用属性来计算圆柱体积

    class Program{ //计算圆柱体积,定义成员int r;int h;double t;//构建属性public int R {get {return r;}set {if (value & ...

  8. Python编程基础 第四章 编程练习 请定义一个Cylinder类,具体要求为:(1)每个Cylinder类对象可以存储一个圆柱体;2)具有用于初始化半径和高的构造方法;(3)具有计算圆柱体体积

    题目内容: 请定义一个Cylinder类,具体要求为:(1)每个Cylinder类对象可以存储一个圆柱体(包括半径和高):(2)具有用于初始化半径和高的构造方法:(3)具有计算圆柱体体积的方法GetV ...

  9. python计算长方体体积最简单代码_C语言编程简单的小程序,计算长方体体积!...

    计算长方体体积 有朋友会说长方体体积还不好算吗?长X宽X高.没错用计算器一下就可以出结果,编程反而麻烦些,但是我们说的是这种思维,如果复杂的重复运算的话写好程序就非常简单了. 简单运算下一个固定高度的 ...

  10. 编写程序计算长方体的体积python_【自学编程】C语言编程简单的小程序,计算长方体体积!...

    计算长方体体积 有朋友会说长方体体积还不好算吗?长X宽X高.没错用计算器一下就可以出结果,编程反而麻烦些,但是我们说的是这种思维,如果复杂的重复运算的话写好程序就非常简单了. 简单运算下一个固定高度的 ...

最新文章

  1. com.android.phone已停止 vivo,oppo,vivo应用程序终止通知不在android fcm中出...
  2. DISCUZ 嵌入点 输出插件模版内容
  3. 12如何隐藏dock栏_iPhone边框“变色”壁纸,隐藏Dock栏
  4. 漫步数学分析十六——紧集与连集的像
  5. conda: command not found
  6. HDU 3622 Bomb Game
  7. 推荐一些高质量的自学网站
  8. 【谷月老师讲WPS】用 Windows 11 的 WSL 安装 WPS for Linux
  9. 斜杠青年:人生的多种可能
  10. FFmpeg一些感想
  11. 无主3局域网找不到服务器,无主之地3局域网模式设置方法攻略 无主之地3局域网怎么用...
  12. 追求成功三要诀 文 | 刘东华
  13. 怎样从一个手机上安两个不同版本的软件_一部手机上怎么安装两个不同版本的微信?一部手机安装两个不同版本微信的方法...
  14. win10鼠标右键点击文件夹一直转圈问题解决
  15. SSMS错误代码大全
  16. windows文件系统格式及U盘格式化建议
  17. 使用SIMD指令加速计算
  18. 傅里叶展开锯齿波形图
  19. Java多线程(卖票案例)
  20. Android Jetpack- Paging3.0的使用

热门文章

  1. Python3对多股票的投资组合进行分析
  2. 软件测试禅道是什么?如何使用?
  3. UML(thinking in uml 学习)--参与者和业务工人和涉众
  4. 图片边缘出现黑点的问题分析和解决(纹理过滤)
  5. HTML页面转PDF 思路
  6. 平时的工作如何体现一个人的技术深度?
  7. 通过命令行更换windows 10 激活码
  8. 电力相关的中文期刊查找
  9. django models 数据库 update_or_create 更新或者插入
  10. Python断言与isinstance()判断数据类型