2012-12-17 45 views
1

将球体转换为补丁后,我绘制了补丁的第一个顶点,并意识到顶点不在球体上。绘制从surf2patch获取的补丁 - Matlab

代码

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

由此得出的数字是这样的

enter image description here

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

由于

回答

2

说明

当一个函数是一个参数传递给另一个功能,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]不同的东西。

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