重新审视了Matlab中的面部着色

时间:2012-12-23 16:21:48

标签: function matlab patch

使用Mathematica我能够创建the following plot

现在我想切换到Matlab - 我刚刚开始学习。我能够使用FL.vertices和FL.faces矩阵以及补丁函数创建三角剖分,看起来像这样

faces=FV.faces; 
facecolor = [.7 .7 .7]; 
patch('faces',faces,'vertices',FV.vertices,...
'facecolor',facecolor,'facealpha',0.8,'edgecolor',[.8.8.8]);
camlight('headlight','infinite'); 
daspect([1 1 1]); axis vis3d; axis off 
material dull;

它产生一个沉闷的image

现在,我有一个函数J,它接受矩阵FL.vertices并返回一个正值矩阵。我想根据顶点J的值为面部着色。可能沿着面插入。到目前为止,边缘可以像以后一样 - 稍后处理。阅读文档后,我不清楚如何完成此任务。我需要手动找到J的最小值和最大值吗?或者Matlab可以自动完成吗?现在可以使用Matlab的预设着色方案之一,就像“温度图”一样。我应该在哪个时候调用我的函数J?它应该如何与patch命令一起使用?我查看了之前对类似问题的回答,但我仍然无法弄清楚如何处理我的情况。任何帮助建议将不胜感激。

P.S。 好。我想我是用简单的

做到的
FV.Cdata=sphere_jacobian(FV.vertices,1,1,0,1);
figure
Hp = patch('faces',FV.faces,'vertices',FV.vertices,...
'FaceVertexCData',FV.Cdata,'facecolor','interp','edgecolor',[.8 .8 .8]); 

但我不确定是否已自动计算和插入最小值和最大值。

1 个答案:

答案 0 :(得分:1)

以下是我认为海报给出的答案,我会把它放在这里,所以问题不会保持开放。

行。我想我是用简单的

做到的
FV.Cdata=sphere_jacobian(FV.vertices,1,1,0,1);
figure
Hp = patch('faces',FV.faces,'vertices',FV.vertices,...
'FaceVertexCData',FV.Cdata,'facecolor','interp','edgecolor',[.8 .8 .8]); 

但我不确定是否已自动计算和插入最小值和最大值。


我做了

colormap(hsv(3200)); 

并规范化我的职能:

jac = sphere_jacobian(FV.vertices,m); 
minj = min(jac);
maxj = max(jac);
jac1 = (jac-minj*ones(size(jac)))/(maxj-minj);FV.Cdata=jac1; 
figure Hp = patch('faces',FV.faces,'vertices',FV.vertices,... 'FaceVertexCData',FV.Cdata,'facecolor','interp','edgecolor',[.8 .8 .8]);

结果可见here