1

将球体转换为面片后,我绘制了面片的第一个顶点,发现顶点不在球体上。

代码

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

结果图如下所示

在此处输入图像描述

顶点怎么可能不在球面上呢?我是不是误会了什么?

谢谢

4

1 回答 1

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()with (nargout = 0) 计算相同的[x, y, z]并绘制它。这是上图中显示的色球。

检查surf2patch.m的源代码表明,当使用单个z参数调用时,它会自动假定xy的值。这些值与不带参数调用绘制的[x, y, z]不同。sphere()

测试

要亲自查看,请在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 ] .

如果您期望多个返回值,请显式分配它们。

于 2012-12-18T01:57:03.423 回答