绘制从surf2patch获得的补丁 - Matlab

时间:2012-12-17 18:38:25

标签: matlab math

将球体转换为贴片后,我绘制了贴片的第一个顶点,并意识到顶点不在球体上。

代码

[faces, vertices] = surf2patch(sphere(),'triangle');
sphere();
hold on;
plot3(vertices(1,1), vertices(1,2), vertices(1,3),'*r');

结果图看起来像这样

enter image description here

顶点如何不在球体表面?我误解了什么吗?

由于

1 个答案:

答案 0 :(得分:2)

<强>解释

当一个函数是另一个函数的参数时, Matlab将其视为具有单个返回值的函数调用。在上面函数调用的上下文中,

[faces, vertices] = surf2patch(sphere(),'triangle');

相当于:

z = sphere();
[faces, vertices] = surf2patch(z,'triangle');

现在回忆一下文档:

[x, y, z] = sphere()计算一组3D坐标 [x,y,z]

z = sphere()计算相同的 [x,y,z] ,只返回 z

带有(nargout = 0)的

sphere()计算相同的 [x,y,z] ,并绘制它。这是上图中显示的颜色范围。

检查 surf2patch.m 的来源显示,当使用单个 z 参数调用时,它会假定 x 的值y 自动。这些值与通过调用sphere()而没有参数绘制的 [x,y,z] 不同。

<强>测试

要亲自查看,请在 surf2patch.m 内部启用断点的情况下跟踪以下代码,并检查输入参数:

[x,y,z] = sphere()
[facesA, verticesA] = surf2patch(x,y,z,'triangle')
[facesB, verticesB] = surf2patch(sphere(), 'triangle')
[facesC, verticesC] = surf2patch(z, 'triangle')

您会看到输出 [facesA,verticesA] 与来自sphere()的图匹配,而对surf2patch()的第二次和第三次调用没有输入 [x ,y] 值,因此它们会自动生成与原始 [x,y,z] 不同的内容。

<强>课

如果您期望多个返回值,请明确指定它们。