STL文件模型体积计算
体积计算方法[1]
三角网格的所有三角面片围成的空间区域是封闭的,三角网格模型的体积可由每个三角面片的投影体积之和来计算。图1所示棱长为l的立方体,投影平面与下底面平行且距离为h。由于立方体各侧面内的三角面片与投影平面垂直,投影体积为0,因此立方体体积V 可由上下底面的4个三角面片t1、t2、t3 和t4的带符号投影体积来计算:
四面体的计算公式已知:
三角形面片在XOY平面的投影是个5面体,每个5面体可以拆分为3个四面体。
MATLAB程序如下:
clear;clc;
%从STL文件里读取法向量与三角形顶点坐标
fid=fopen('dakong.txt'); %打开文件
f=0; fnum=0; vnum=0; fmlie=1; vmlie=1;m=1; fmhang=1; vmhang=1;vshu=1; vz=0;
while feof(fid) == 0 %循环直到文件读取完成
tline = fgetl(fid); %逐行读取文件内容
fword = sscanf(tline, '%s '); %从获得的一行字符串中删除空格,提取字符型数据存储在fword指针上
if strncmpi(fword, 'f',1) == 1; %从'f'判断是不是法向量
f = sscanf(tline, '%*s %*s %lf %lf%lf'); %读取每个面的法向量的三个坐标(x,y,z)
fnum=fnum+1;
fm(fnum,:)=f';
end
if strncmpi(fword, 'v',1) == 1; % 从'v'判断是不是顶点坐标
v = sscanf(tline, '%*s %lf %lf %lf'); %读取每个三角形的三个顶点坐标(x,y,z)
vnum=vnum+1;
vm(vnum,:)=v';
end
end
fprintf(' The sum of trangle are: %d.\n',fnum); %输出三角形的数目
%计算STL模型的体积
while(fmhang<=fnum)
x1=vm(vmhang,1); y1=vm(vmhang,2); z1=vm(vmhang,3);
x2=vm(vmhang+1,1); y2=vm(vmhang+1,2); z2=vm(vmhang+1,3);
x3=vm(vmhang+2,1); y3=vm(vmhang+2,2); z3=vm(vmhang+2,3);
vmhang=vmhang+3;
VF=[1 1 1 1;x1 x2 x3 x2;y1 y2 y3 y2;z1 z2 z3 0]; %计算四面体的体积
VS=[1 1 1 1;x1 x1 x2 x3;y1 y1 y2 y3;z1 0 0z3];
VT=[1 1 1 1;x1 x2 x3 x3;y1 y2 y3 y3;0 0 0z3];
v1=(1/6)*abs(det(VF));
v2=(1/6)*abs(det(VS));
v3=(1/6)*abs(det(VT));
vds=v1+v2+v3;
f=fm(fmhang,:);
p=[0,0,1];
s=dot(f,p);
if(s>0) %判断三角形的法向量与投影平面的法向量的关系
vdscell(m,1)=vds;
end
if(s<0)
vdscell(m,1)=-vds;
end
m=m+1;
fmhang=fmhang+1;
end
while(vshu<=fnum)
vz=vz+vdscell(vshu,1); %对单独三角形的投影体积进行累加
vshu=vshu+1;
end
fprintf(' Volumn is: %fmm3.\n',vz);
[[i]]王泉德. 任意三角网格模型体积的快速精确计算方法[J]. 武汉:武汉大学.2009,45(18):32-58
STL文件模型体积计算相关推荐
- VTK For python 三维文件obj 体积计算
1.安装python3 到官网下载 Download Python | Python.org 或者 http://链接:https://pan.baidu.com/s/1xGpH53Ia8MyZ3g7 ...
- 点云/网格模型的体积计算
点云体积计算 有时用激光扫描设备扫描零件或者用无人机进行测量后会想知道它们的体积.比如下面的土堆: 如果扫描得到的数据是一系列三维点云,那么体积就比较难求,因为如何定义物体的边界比较困难.一种方法是提 ...
- 通过Node.js解析stl文件
通过Node.js解析stl文件 在此之前请确认已安装Node.js,已配置环境变量.如未安装与配置,请查看Node.js安装及环境配置(Windows) 一.下载Node项目文件 Node项目文件下 ...
- .stl 3D模型文件的读取计算,方法和程序实现(matlab版C++版python版)
0. 背景描述 3D模型.3D打印中很常见的一种文件格式.STL文件,其描述的主要就是其表面点所组成的三角面片的点坐标信息(vertex),和法向量(normal). 如果单纯查看的话,很多软件都可以 ...
- stl文件unity_Unity导入STL格式模型(一)
STL文件是一种非常简单且实用的三角形网格文件,他只按照三角面片的方式存储了所有的面信息及法矢量,不包含纹理以及其他任何媒体信息,主要存储格式分为:ASCII码格式.二进制格式. 这种文件格式在工业上 ...
- threejs 形状几何体_Three.js模型几何体面积、体积计算
Three.js模型几何体面积.体积计算 在工作中通过Three.js开发项目的时候,一些特定的情况下你可能需要计算一个三维模型的表面积或者体积,比如在3D打印的Web项目中,你需要计算一个三维模型的 ...
- android stl 3d模型,3D文件转化为STL文件 - 魔猴网
魔猴网免费在线3D文件转化工具常见问题 Q:什么是3D文件转化工具 A:3D文件转化工具是魔猴网针对3D打印文件推出的免费在线工具,可以将20多种常见的3D文件格式转化为可3D打印的文件格式,即stl ...
- 点坐标(点云)表示的模型转为.stl文件用于3D打印
点坐标(点云)表示的模型转为.stl文件用于3D打印) 步骤 这里的模型主要针对优化结束后获得的二维模型.由于模型的不规则,最终得到的优化结果是模型上点的坐标及这个点上的密度值.这个方法可以拓展到任何 ...
- 用SolidWorks将CAD模型转为STL格式并改变单位,利用cloudcompare将STL文件转换为点云。
一.首先将CAD模型转换为STL格式,由于Solidworks默认的单位为mm,而我需要的单位格式为m,因此还需对单位进行转换. 1)先利用Solidworks将原文件另存为STL格式,如下图所示 2 ...
最新文章
- SQLite | Python3导入csv到SQLite3
- R语言ggplot2可视化分面图(faceting)、编写自定义函数将生成的分面图分裂成多个子图、并按照索引读取对应的可视化图像:Split facet plot into list of plots
- c语言兔子繁殖问题分析和递归方程,经典的兔子生兔子问题(C#递归解法)
- 《白帽子将Web安全》摘抄
- win7局域网共享设置_Win7系统打印机共享不了的设置方法思路!
- go和python切片的不同
- 华为手机打字声音怎么开启_华为手机这5个超实用小功能,记得要开启,谁用都说好...
- sklearn中eof报错_sklearn中的数据预处理和特征工程
- luoguP1742 最小圆覆盖
- linux如何查看nginx是否启动
- 到今天上了一个月班了,功能基本实现了.
- 小米造富神话虚实:平均年薪16万 470亿元期权咋分
- ibatis.net 学习笔记
- 动态规划相关知识点总结
- iOS开发 语音合成支持后台和锁屏情况
- java后端面试总结
- wifi热点共享android上网 网关 静态ip,公共WIFI热点无线上网 - 几种Wifi无线网络上网方式及其组建方法...
- 夏普比率excel_在Excel中计算比率
- qt creator 32位linux,Qt Creator下载mac版-Qt Creator Mac版下载 V4.14.2-PC6苹果网
- 实验吧 - 天下武功唯快不破
热门文章
- 希腊字母常用指代意义及其中英文读音
- 【读书笔记】Python编程:从入门到实践-埃里克·马瑟斯,python基础体系巩固和常见场景练习
- 想知道如何图片转文字?这几个方法你别错过
- 为什么看P1dB压缩,而不是2dB,3dB压缩
- 算法--UR机器人位姿表示
- Yarn HA 原理
- linux 查看gz文件,【shell 脚本】查看*.gz 文件的内容
- 华为路ws5200设置虚拟服务器,华为路由器WS5200如何设置上网 最详细的华为路由器WS5200上网设置方法教程...
- yxc_第一章 基础算法(三)_离散化
- eclipse调试项目,debugger没反应 解决办法