将球体转换为贴片后,我绘制了贴片的第一个顶点,并意识到顶点不在球体上。
代码
[faces, vertices] = surf2patch(sphere(),'triangle');
sphere();
hold on;
plot3(vertices(1,1), vertices(1,2), vertices(1,3),'*r');
结果图看起来像这样
顶点如何不在球体表面?我误解了什么吗?
由于
答案 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 。
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] 不同的内容。
<强>课强>
如果您期望多个返回值,请明确指定它们。