Matlab中写入.off文件

OFF文件介绍

转载自:http://blog.sina.com.cn/s/blog_643634b80102v166.html

物体文件格式(.off)文件通过描述物体表面的多边形来表示一个模型的几何结构,这里的多边形可以有任意数量的顶点。

普林斯顿形状 Banchmark(Princeton Shape Benchmark)中的 .off 文件遵循以下标准:

OFF文件全是以OFF关键字开始的ASCII文件。
下一行说明顶点的数量、面片的数量、边的数量。边的数量可以安全地省略。
顶点按每行一个列出x、y、z坐标。
在顶点列表后,面片按照每行一个列表,对于每个面片,顶点的数量是指定的,接下来是顶点索引列表。

详见 一个立方体的简单例子 cube.off:
  OFF
  顶点数 面片数 边数
  x y z
  x y z
  …
  n个顶点 顶点1的索引 顶点2的索引 … 顶点n的索引
  …

注意顶点标号是从0开始(不是从1开始)的,边数总是0。

off文件中一个立方体文件的示例:
OFF
8 12 0
-0.274878 -0.274878 -0.274878
-0.274878 0.274878 -0.274878
0.274878 0.274878 -0.274878
0.274878 -0.274878 -0.274878
-0.274878 -0.274878 0.274878
-0.274878 0.274878 0.274878
0.274878 0.274878 0.274878
0.274878 -0.274878 0.274878
3 0 1 3
3 3 1 2
3 0 4 1
3 1 4 5
3 3 2 7
3 7 2 6
3 4 0 3
3 7 4 3
3 6 4 7
3 6 5 4
3 1 5 6
3 2 1 6

MATLAB中将离散数据写入OFF文件中

首先,我们需要建立该离散三维体数据的等值面:

% 建立等值面
 fv = isosurface(V,0.5);

紧接着,在MATLAB中我们可以使用patch函数查看一下效果:

% 简单查看效果
p = patch(fv);
view(3);

下一步,我们就可以通过预先计算好的等值面的顶点和面片索引信息写入OFF文件中了:

% 文件写入
fid=fopen('result.off','w');
ND=size( fv.vertices,1);
NF=size(fv.faces,1);
NL=0;
fprintf(fid,'OFF\n');
fprintf(fid,'%d %d %d\n',ND,NF,NL);
for i=1:ND
	fprintf(fid,'%d %d %d\n', fv.vertices(i,1)-1,fv.vertices(i,2)-1,fv.vertices(i,3)-1);
end
for i=1:NF
    fprintf(fid,'%d %d %d %d\n',3,fv.faces(i,1)-1,fv.faces(i,2)-1,fv.faces(i,3)-1);
end
fclose(fid);

注意:代码中我们对所有的面片和顶点索引都减1,这是因为MATLAB中的索引从1开始。

总结

以上内容是我个人在实践中的总结,如有不对或者更好的方法请多多指教。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值