如何解决行进立方体 - 获得倾斜的表面
我尝试绘制 Paul brouke (http://paulbourke.net/geometry/polygonise/) 的 marching 立方体 LUT 生成的所有等值面。我通过 triTable LUT 选择顶点作为边缘的中点。我得到了这些高度倾斜的表面,我想弄清楚我是否犯了任何错误。这是用于此的 matlab 代码。
我得到的结果似乎不是 MC 应该提供的 14 种独特配置的对称性.. 我想知道我哪里出错了.. 我确定 LUT 是正确的,因为来源有被广泛使用..
function visualize
clear all
close all
clc
for id =1:256
fig = figure('color',[1 1 1]);
[vertices,faces] = mc(id);
[rows,cols]=size(vertices);
patch('vertices',vertices,'faces',faces,'edgecolor',[0 0 0],...
'facecolor',[1 0 0],'facelighting','phong')
Box on
ax = gca;
ax.BoxStyle = 'full';
axis([0 1 0 1 0 1])
set(gca,'linewidth',2)
title(strcat(num2str(id),'(',num2str(round(rows/3)),' Triangles)'));
xlabel('X')
ylabel('Y')
zlabel('Z')
view(3)
camup([0 0 1])
fname = strcat('outputs/',num2str(id),'.png');
saveas(gcf,fname)
pause()
close(fig)
end
end
%id can be from 0-256 configuration
function [vertices,faces] = mc(id)
triTable = [
-1,-1,-1;
0,8,3,1,9,-1;
1,2,10,-1;
9,-1;
2,-1;
3,11,-1;
4,7,4,-1;
8,-1;
11,5,-1;
5,-1;
10,-1;
7,6,-1;
6,-1;
-1,-1
]+1;
edgeConnection = [
0,1;
1,3;
2,3;
0,2;
4,5;
5,7;
6,7;
4,6;
0,4;
1,5;
3,7;
2,6]+1;
vertexList = [
0,0;
1,0;
0,1;
0,1];
edgeDim = [
0;
1;
0;
1;
0;
1;
0;
1;
2;
2;
2;
2;
]+1;
dummy = triTable(id,:);
vertices = [];
faces = [];
for i=0:4
if dummy(3*i+1)==0
break;
end
for k=1:3 %3verticies for triangle
vertex = [0,0];
for j=1:3 %3 Dim
if edgeDim(dummy(3*i+k))==j
vertex(j) = 0.5*(vertexList(edgeConnection(dummy(3*i+k),1),j)+vertexList(edgeConnection(dummy(3*i+k),2),j));
else
vertex(j) = vertexList(edgeConnection(dummy(3*i+k),j);
end
end
vertices = [vertices;vertex];
end
faces = [faces;[3*i+1,3*i+2,3*i+3]];
end
end
解决方法
我犯了一个愚蠢的错误,用不同的编号符号定义了 EdgeConnection 和 vertexList...我现在已经编辑了现在可以工作的问题中的代码
非常感谢@Ander Biguri 在调试过程中为我指明了正确的方向
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。