2

使用 Mathematica 我能够创建以下图

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

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;

它产生一个沉闷的图像

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

PS好的。我想我用简单的方法做到了

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]); 

但我不确定 min 和 max 是否已被自动计算和插值。

4

1 回答 1

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]); 

但我不确定 min 和 max 是否已被自动计算和插值。


我做了

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]);

结果可以在这里看到。

于 2012-12-27T10:41:59.687 回答