几何算法系列:空间实体体积计算公式推导

devtools/2024/10/23 23:30:10/

1.前言

面积和体积的计算是常见和基础的几何算法话题,面积和体积通常作为面或构件的基本信息参与相关的建模、计算、分析等过程。

有关面积的计算,可以参考博主此前的文章,

一种误差较小的轮廓面积计算算法_轮廓面积计算原理-CSDN博客文章浏览阅读920次,点赞18次,收藏19次。基于微分思想的轮廓面积计算方法之一是将多边形轮廓边与X轴会Y轴进行围合,形成一个个梯形,每个梯形的面积有符号,累计求和即得到多边形轮廓的面积。详见博主之前的文章,记录导致计算轮廓面积出错的一个坑点-CSDN博客计算轮廓面积是常见的几何算法话题,获取轮廓面积、计算轮廓法线等场景会涉及到。计算轮廓面积的方法有很多,一种常用的是微积分思路的分段求和办法,即组成轮廓的每条线段与X轴或Y轴进行有向投影,轮廓边线与X轴或Y轴的投影之和即为轮廓的有向面积。_轮廓面积计算原理https://blog.csdn.net/baidu_38621657/article/details/141868522

本文对实体体积计算算法进行说明。

2.内容

实体体积计算方法不唯一,如微积分、投影求和、公式推导应用等方式,其实很多方式的原始思维是一样的,即来源于微分和积分思路,通过公式推导简化计算逻辑,提高计算效率。

 其中,

公式如上,解释如下,

  1. Si为构成实体的面;
  2. ni为面的法向;
  3. P0,i为面上任意一点;
  4. ci为面所在平面的参数,即面所在平面到原点(0,0,0)的距离;
  5. Area(Si)为面的面积,该面积为基于法向ni的面积,如果ni为面法向,则面积符号为正,如果ni为面法向对向,则面积为负,其实这里ni为法向或法向的对向不影响结果,但不能为任意方向,那样,结果数值会错误。
  6. ci * Area(Si)为平面到原点构成的拉伸体的体积
  7. 整个公式的解释就清楚了吧,不清楚可以关注博主公众号留言;

3.公式推导

其实体积计算可以由面积计算扩展而来,实体各个面对某一平面(通常为XY、YZ或ZX平面)投影所围成区域有符号体积之和即为实体的体积

上述解释也可以作为求体积的一种方法,不过稍微复杂了点,毕竟当碰到顶面倾斜的直纹体的体积计算话题时,没有什么人会感觉到十分轻松。

我们继续推导,

  1. 面Si在空间的三个正交平面均有分量:Si_x、Si_y、Si_z;
  2. Si在某空间平面的投影等价于其在此平面的分量在此平面的投影,此处的投影可扩展为所围成的空间区域;如Si在XY平面的投影等于Si_z在XY平面的投影;
  3. Ci为原点到面Si所在平面的距离,同样,Ci由三个分量:Ci_x、Ci_y、Ci_z;
  4. Si在XY平面的投影区域体积为Si*Ci_z=Si_z*Ci_z,这里的Si和Ci_z均为向量,结果为数值;同理可求Si在YZ、ZX平面投影区域的体积
  5. Si在空间三个正交平面投影区域体积之和为:Si*(Ci_x+Ci_y+Ci_z) = Si*Ci
  6. 上述提到过构成实体的面在空间某平面投影所形成区域体积之和为实体体积,可进一步得知,构成实体的面在空间三个正交平面投影之和的之和为3倍的实体体积,如公式所示;
  7. 为什么不直接求1倍的体积呢?因为实体时三维空间中的元素,根据上述思路,3倍体积公式得到了简化,容易求解,将结果除以3即得到实体体积

4.效果

代码就不上传了,上述思路和公式是准确的,可自行实现,感兴趣可进一步联系博主。

经单元测试验证,各种情况下均通过单元测试,一个领域问题是浮点运算会带来误差,减少误差的话题可参考博主此前文章,

关于float浮点值二进制存储和运算精度损失的话题_float的二进制存储和输出-CSDN博客文章浏览阅读1.1k次,点赞8次,收藏18次。浮点值的存储、运算都可能会带来精度损失,了解精度损失背后的机制原因方便我们更好的了解什么情况下会发生精度损失、什么情况下精度损失较大,以及思考怎么避免或减少精度损失。_float的二进制存储和输出https://blog.csdn.net/baidu_38621657/article/details/141027014

5.写在后面

图形几何、数据处理、并行计算相关研究和研发,公众号:geometrylib,欢迎交流。

 

_________哈市雪花__________


http://www.ppmy.cn/devtools/128292.html

相关文章

如何高效解锁业务数据价值:多云时代应该怎么构建新一代数据平台架构

本文是“2021 InfoQ 年度技术盘点与展望”系列文章之一,由 InfoQ 编辑部制作呈现,重点聚焦大数据领域在 2021 年的重要进展、动态,希望能帮助你准确把握 2021 年大数据领域的核心发展脉络,在行业内始终保持足够的技术敏锐度。 “I…

养老院网站毕设计算机毕业设计基于SpringBootSSM框架

目录 1.概述 2.设计思路 2.1 开发背景 2.2 项目需求 3. 需求分析 3.1‌用户需求分析‌ 3.2‌功能需求‌ 3.3非功能需求‌ 4. 数据库设计 1.概述 本文旨在设计并实现一个功能全面、用户友好的养老院网站,以提供养老院管理、老人信息管理、服务预约与跟踪等…

现今 CSS3 最强二维布局系统 Grid 网格布局

深入学习 CSS3 目前最强大的布局系统 Grid 网格布局 Grid 网格布局的基本认识 Grid 网格布局: Grid 布局是一个基于网格的二位布局系统,是目前 CSS 最强的布局系统,它可以同时对列和行进行处理(它将网页划分成一个个网格,可以任…

未来啥样?细思极恐

让我们一起畅想AI给我们带来的巨大便利吧, 立个flag,后续我们来见证是否语言成真! 一:机器人代替了传统家用电器成了家庭必备 小汽车、机器人将来是家庭必备了,家庭机器人可以陪护老人,陪护孩子&#xff0…

Tongweb7049m4+THS6010-6012版本 传真实ip到后端(by yjm+lwq)

遇到客户需要通过ths传真实ip到后端也就是部署到tongweb的需求,在ths的httpserver.conf里的location块配置了以下内容: proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwar…

基于SpringBoot+Vue+MySQL的智慧博物馆管理系统

系统展示 用户前台界面 管理员后台界面 系统背景 随着信息技术的飞速发展,智慧化已成为博物馆发展的新趋势。然而,当前许多博物馆仍面临着预约困难、参观体验不佳等问题,严重影响了博物馆的服务质量和公众形象。传统的预约和票务管理方式已难…

一站式讲解Wireshark网络抓包分析的若干场景、过滤条件及分析方法

目录 1、软件为什么会出现各式各样的网络问题? 2、Wireshark抓包工具与tcpdump命令 3、典型的网络场景下如何抓包 3.1、网卡 3.2、集线器 3.3、交换机 3.4、路由器 3.5、加密机 3.6、防火墙 4、Wireshark简要介绍 5、Wireshark过滤条件说明 6、结合常用协议进行分…

LeetCode第239题:滑动窗口k内求最大值

来源:LeetCode第239题 难度:困难 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 这段代码实现了 滑动窗口最大值 的问题&#xff…