将球体转换为补丁后,我绘制了补丁的第一个顶点,并意识到顶点不在球体上。绘制从surf2patch获取的补丁 - Matlab
代码
[faces, vertices] = surf2patch(sphere(),'triangle');
sphere();
hold on;
plot3(vertices(1,1), vertices(1,2), vertices(1,3),'*r');
由此得出的数字是这样的
如何顶点不是球体的表面上?我误解了什么吗?
由于
将球体转换为补丁后,我绘制了补丁的第一个顶点,并意识到顶点不在球体上。绘制从surf2patch获取的补丁 - Matlab
代码
[faces, vertices] = surf2patch(sphere(),'triangle');
sphere();
hold on;
plot3(vertices(1,1), vertices(1,2), vertices(1,3),'*r');
由此得出的数字是这样的
如何顶点不是球体的表面上?我误解了什么吗?
由于
说明
当一个函数是一个参数传递给另一个功能,Matlab的将此视为具有单个返回值的函数调用。在我们上面的函数调用的情况下,
[faces, vertices] = surf2patch(sphere(),'triangle');
等同于:
z = sphere();
[faces, vertices] = surf2patch(z,'triangle');
现在从文档回忆:
[x, y, z] = sphere()
计算一组三维坐标,[ x,y,z]。
z = sphere()
计算相同[X,Y,Z],并且仅返回Ž。
sphere()
与(nargout = 0)计算相同的[x,y,z],并绘制它。这是上图中显示的颜色范围。
检查用于surf2patch.m源显示,当与单个Ž参数调用时,它假定值X和ÿ自动。这些值不同于[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]不同的东西。
课
如果您希望在多个返回值,明确指定它们。