首页 文章

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

提问于
浏览
2

使用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命令一起使用?我查看了之前对类似问题的回答,但我仍然无法弄清楚如何处理我的情况 . 任何帮助建议将不胜感激 .

附:好 . 我想我做得很简单

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 回答

  • 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 .

相关问题