三维模型表面积计算方法

【版权声明】
本文为博主原创文章,未经博主允许严禁转载,我们会定期进行侵权检索。

更多算法总结请关注我的博客:https://blog.csdn.net/suiyingy,或”乐乐感知学堂“公众号。
本文章来自于专栏《Python三维模型处理基础》的系列文章,专栏地址为:https://blog.csdn.net/suiyingy/category_12462636.html。  

        在当今数字化时代,三维模型已经广泛应用于各个领域,如游戏开发、建筑设计、工程制图等。了解三维模型的表面积以及其计算方法,对于模型的几何特征分析和后续处理具有重要意义。本篇博文将带您深入了解三维模型表面积的定义、作用以及计算方法。

1 表面积定义

        三维模型表面积是指模型所有外部表面的总面积。在数学上,它可以被视为一个多边形网格的组合,由许多个平面三角形组成。每个三角形都有自己的面积,将它们相加即可得到整个模型的表面积。

2 表面积作用

        几何特征分析:表面积可以用于对三维模型的几何特征进行分析和描述。通过表面积,我们可以了解模型的大小、形状以及精细程度,从而为后续的评估和改进工作提供基础数据。

        光照和渲染:在计算机图形学中,光照和渲染是模拟真实世界的重要步骤。表面积决定了模型的各个部分可以接收到多少光线,从而影响最终的视觉效果。计算表面积有助于优化渲染过程,提高图像质量和真实感。

        物理仿真:在物理仿真中,表面积对于计算模型的质量、密度以及碰撞检测等方面非常重要。通过对表面积的计算,可以更准确地模拟模型的物理行为,提高仿真的准确性和真实度。

        此外,上一节介绍的三维模型顶点法向量计算过程中加权求和的权重也由表面积来决定。

3 计算方法

        计算三维模型表面积的方法有多种,这里介绍两种常用的方法,即多边形网格法和曲面拟合法。

        多边形网格法的步骤为:

        (1)首先,将三维模型表示为一个由多个小三角形组成的多边形网格。

        (2)计算每个三角形的面积,可以使用海伦公式或矢量运算等方法。

        (3)将所有三角形的面积相加,得到整个模型的表面积。

        曲面拟合法的步骤为:

        (1)首先,将三维模型表面离散化为一系列点云。

        (2)使用曲面拟合算法,如Bezier曲线或B样条曲线,将点云拟合成光滑的曲面。

        (3)计算拟合曲面的表面积。

        需要注意的是,计算三维模型表面积的精确度与离散化程度相关。较为密集的网格或点云将提供更准确的结果,但也会增加计算复杂度和存储需求。

4 python示例程序

        4.1 单个三角面

        这里我们仍然采用trimesh和open3d来计算三维模型的表面积。我们首先以单个三角面为例,假设顶点坐标分别为[[0.0, 0.0, 1.0], [3.0, 0.0, 1.0], [0.0, 4.0, 1.0]]。显然,这是一个直角三角形,其面积为1/2 * 3 * 4 = 6。

        Trimesh计算三维模型表面积的函数为mesh.area,上述三角面的计算结果为6.0,与预期理论结果一致。关键程序如下所示。

mesh = trimesh.Trimesh(vertices=vertices, faces=faces)
print('area result: ', mesh.area)

        Open3d计算三维模型表面积的函数为open3d.geometry.TriangleMesh.get_surface_area (Python method, in open3d.geometry.TriangleMesh),上述三角面的计算结果为6.0,与预期理论结果一致。关键程序如下所示。

mesh.vertices = o3d.utility.Vector3dVector(vertices)
mesh.triangles = o3d.utility.Vector3iVector(faces)
print('area result: ', mesh.get_surface_area())

        4.2 三棱柱表面积

        假设三棱柱顶点和三角网格面分别为[[0.0, 0.0, 0.0], [3.0, 0.0, 0.0], [0.0, 4.0, 0.0], [0.0, 0.0, 5.0], [3.0, 0.0, 5.0], [0.0, 4.0, 5.0]]、[[1, 3, 2], [2, 3, 5], [5, 3, 6], [1, 4, 3], [3, 4, 6], [1, 2, 4], [2, 5, 4], [4, 5, 6]]。三棱柱示意图如下所示,底面是一个直角三角形。上下底面的面积均为6.0,三个侧面的面积依次为15.0、20.0、25.0,因此总面积为72.0。

图1 三棱柱模型

        Trimesh和open3d相应表面积计算结果均为72.0。之前的博文介绍提到,三维模型的体积计算结果受到顶点顺序和封闭性影响。而三维模型的表面积则不受顶点顺序影响,并且仅计算三角网格的面积之和,孔洞不会自动补全或参与计算。

        Trimesh可通过mesh.area_faces来获取各个三角面的面积,例如上述三棱柱对应的area_faces的计算结果为[ 6.  12.5 12.5 10.  10.   7.5  7.5  6. ]。

        上述计算结果的详细Python示例程序下载地址为“https://download.csdn.net/download/suiyingy/88457956”,或者在”乐乐感知学堂“內回复”3d处理基础“即可。

        此外,Cloud Compare也提供三维模型的表面积计算方法,其计算步骤为:首先加载并选中mesh模型,然后依次点击Edit->Mesh->Measure surface,如下图所示。

图2 Could Compare表面积计算过程

        表面积计算结果会显示在下方提示区域,如下图所示。三棱柱表面积计算结果为S=72,与上述手动计算结果一致。

图3 Could Compare表面积计算结果

        本篇博文介绍了三维模型表面积的定义、作用以及常用的计算方法。了解三维模型的表面积对于模型分析、渲染和仿真具有重要意义。通过计算表面积,我们可以更深入地理解三维模型的几何特征,并为相关领域的应用提供有力支持。希望本文能够帮助读者更好地理解和应用三维模型表面积的知识。

【版权声明】
本文为博主原创文章,未经博主允许严禁转载,我们会定期进行侵权检索。

更多算法总结请关注我的博客:https://blog.csdn.net/suiyingy,或”乐乐感知学堂“公众号。
本文章来自于专栏《Python三维模型处理基础》的系列文章,专栏地址为:https://blog.csdn.net/suiyingy/category_12462636.html。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/115079.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在线存储系统源码 网盘网站源码 云盘系统源码

Cloudreve云盘系统源码-支持本地储存和对象储存,界面美观 云盘系统安装教程 测试环境:PHP7.1 MYSQL5.6 Apache 上传源码到根目录 安装程序: 浏览器数据 http://localhost/CloudreveInstallerlocalhost更换成你的网址 安装完毕 记住系统默认的账号密码 温馨提示:如果默认…

【STM32】标准库与HAL库对照学习系列教程大全

【STM32】标准库与HAL库对照学习系列教程大全 一、前言二、准备工作三、基础篇四、进阶篇五、特别篇六、外设篇 一、前言 前言:开始工作后,学习的时间变少了很多,但是今年的1024节,还是打算送个福利给大家,将之前的STM…

【Java 进阶篇】Java XML快速入门:理解、解析和生成XML

XML(可扩展标记语言)是一种常用于存储和交换数据的标记语言,而Java是一种强大的编程语言,它具有处理XML的能力。在本篇博客中,我们将探讨XML的基础知识,学习如何在Java中解析和生成XML文档,以及…

springboot 程序设计优雅退出

一 springboot优雅退出 1.1 概述 在springboot2.3版本后,实现了优雅退出功能。当server.shutdowngraceful启用时,在 web 容器关闭时,web 服务器将不再接收新请求,并将剩余活动执行完成给设置一个缓冲期。缓冲期 timeout-per-shu…

《向量数据库》——向量数据库Milvus Cloud 和Dify比较

Zilliz Cloud v.s. Dify Dify 作为开源的 LLMs App 技术栈,在此前已支持丰富多元的大型语言模型的接入,除了 OpenAI、Anthropic、Azure OpenAI、Hugging face、Replicate 等全球顶尖模型及模型托管平台,也完成了国内主流的各大模型支持&#…

pycharm操作git、前后端项目上传到gitee

pycharm操作git 之前用命令做的所有操作,使用pychrm点点就可以完成 克隆代码 上方工具栏Git ⇢ \dashrightarrow ⇢ Clone ⇢ \dashrightarrow ⇢ 填写地址(http、ssh) 提交到暂存区,提交到版本库,推送到远程 直接…

初始Redis 分布式结构的发展演变

目录 Redis的特点和使用场景 分布式系统的引入 单机系统 分布式系统 应用服务器的增多(处理更多的请求) 数据库读写分离(数据服务器的增多) 引入缓存 应对更大的数据量 业务拆分:微服务 Redis的特点和使用场景 我们先来…

Andriod学习笔记(二)

页面设计的零碎知识 通用属性设置文本大小设置视图宽高设置视图的对齐方式 页面布局LinearLayoutRelativeLayoutGridLayoutScollView 按钮触控ButtonImageViewImageButton 通用属性 设置文本大小 纯数字的setTextSize方法,内部默认字体单位为sp,sp是An…

YOLOv7-PTQ量化部署

目录 前言一、PTQ量化浅析二、YOLOv7模型训练1. 项目的克隆和必要的环境依赖1.1 项目的克隆1.2 项目代码结构整体介绍1.3 环境安装 2. 数据集和预训练权重的准备2.1 数据集2.2 预训练权重准备 3. 训练模型3.1 修改模型配置文件3.2 修改数据配置文件3.3 训练模型3.4 mAP测试 三、…

[Spring] SpringBoot2 简介(一)—— 基础配置

目录 一、SpringBoot 简介 1、Spring 的缺点 2、SpringBoot 功能 二、SpringBoot 入门案例 1、实现步骤 2、访问服务器 3、入门小结 4、Idea 快速构建 SpringBoot 工程 5、起步依赖无需版本号 6、主启动类的在项目中的位置(*重要*) 三、Sprin…

【小白专用 已验证】PHP连接SQLServer数据库

PHP是一门强大的服务器端脚本语言,而SQL Server是Microsoft开发的一款关系型数据库管理系统。为了在PHP中直接操纵SQL Server数据库,需要通过安装SQL Server扩展来实现。这篇文章将详细介绍如何在PHP中使用SQL Server扩展来操作数据库。 首先&#xff0…

链表的中间结点-力扣

1、题目描述 给你单链表的头结点 head ,请你找出并返回链表的中间结点。 如果有两个中间结点,则返回第二个中间结点。 题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海…

使用 Rust 和 cURL 库下载程序

以下是一个使用 Rust 和 cURL 库的下载器程序,用于下载 图像。此程序使用了 https://www.duoip.cn/get_proxy 的代码。 extern crate curl; ​ use std::io::{self, Read}; use std::error::Error; ​ fn main() {let url "https://www.baidu.com";let …

USB学习(1):USB基础之接口类型、协议标准、引脚分布、架构、时序和数据格式

连接计算机外围设备最简单的方法是通过USB(通用串行总线)。USB是即插即用接口,可以将扫描仪、打印机、数码相机、闪存驱动器等计算机外围设备连接到计算机上。本篇文章就来介绍一下USB的一些基础知识,包括。 文章目录 1 接口类型和标准规范2 引脚分布3 …

centos如何根据端口号查询程序路径

centos如何根据端口号查询程序路径 如果是半路接受的应用,上个人只给你说了程序的端口号,别的都没,那怎么找程序的路径哪?一是给上上个人要,二是自己找(我是自己找的) 小白教程,一…

【计网 DNS】计算机网络 DNS协议详解:中科大郑烇老师笔记 (六)

目录 0 引言1 DNS概述1.1 定义1.2 DNS域名结构1.2 域名解析步骤 🙋‍♂️ 作者:海码007📜 专栏:计算机四大基础专栏📜 其他章节:网络快速入门系列、计算机网络(一)、计算机网络&…

分享一下我家网络机柜,家庭网络设备推荐

家里网络机柜搞了几天终于搞好了,非专业的,走线有点乱,勿喷。 从上到下的设备分别是: 无线路由器(当ap用):TL-XDR6088 插排:德木pdu机柜插排 硬盘录像机:TL-NVR6108-L8P 第二排左边…

【Spring Cloud Alibaba】seata分布式事务官方入门案例(实战版)

文章目录 1. 业务介绍1.1. 用例1.2. 架构图1.3. 3个服务的代码及业务逻辑(略) 2. SEATA 的分布式交易解决方案3. 由Dubbo SEATA提供支持的示例(实战)3.1. 步骤 1:建立数据库,如seata数据库3.2. 步骤 2&…

2023高频前端面试题(含答案)

一、简单页面1、CSS选择器样式优先级2、CSS实现三列布局(左右固定宽度,中间自适应) (1)CSS浮动 第一个float:left,第二个float:right,第三个设置margin-left和margin-right (2&#…

无纸化办公小程序数据交互、wxs的使用

前言 很多同志们再写小程序的过程中,不知道该怎么发起HTTP请求到后端,在Web环境中发起HTTPS请求是很常见的,但是微信小程序是腾讯内部的产品,不能直接打开一个外部的链接。例如,在微信小程序中不能直接打开www.taobao…