MATLAB R2011b中三角形三维表面的不稳定数据光标行为

时间:2013-07-03 13:24:15

标签: matlab 3d triangulation delaunay

当应用于三角形三维表面图时,我看到MATLAB R2011b中数据光标的不稳定行为:点击某些点会选择完全不同的点。圆柱示例:

[r, phi, h] = meshgrid(1, 0:pi/10:2*pi, 0:0.05:1);
x = r.*cos(phi);
y = r.*sin(phi);
z = h;
xyz = [x(:) y(:) z(:)];
tri = delaunay(xyz);
trimesh(tri, xyz(:,1), xyz(:,2), xyz(:,3), ...
        'LineStyle', 'none', 'Marker', '.', 'MarkerSize', 30)
view(-37, 28)

然后启用数据光标模式并尝试选择前面一列的最顶部点。在我的安装中,MATLAB不会选择光标下的点,而是随机选择的另一个点。

这是一个错误还是我做错了什么?

3 个答案:

答案 0 :(得分:1)

我认为这是因为你的网格中有这么多行;如果您删除' linestyle',' none'并绘制网格的一小部分(使用例如[r, phi, h] = meshgrid(1, 0:pi/10:2*pi, 0:0.5:1); as your first line,您可以看到它们正在通过您的圆柱体。数据光标模式将转到您单击的线上最近的顶点,因此如果您单击隐藏在面部下方的一条线,它可能会跳到该线上的一个顶点,而不仅仅是您可见的点。我不确定是否有一种简单的方法可以改变这种行为。

答案 1 :(得分:1)

我在a File Exchange contribution by Jochen Rau找到了解决此问题的方法。您可以通过the 'HitTest' property定义数据光标可选择的数据。因此,对于我提供的示例,我只希望标记可以选择,解决方案是绘制没有标记的网格,并将'HitTest'设置为'off',然后使用'scatter3'绘制标记。

[r, phi, h] = meshgrid(1, 0:pi/10:2*pi, 0:0.05:1);
x = r.*cos(phi);
y = r.*sin(phi);
z = h;
xyz = [x(:) y(:) z(:)];
tri = delaunay(xyz);
figure
hold on
trimesh(tri, xyz(:,1), xyz(:,2), xyz(:,3), ...
        'LineStyle', 'none', 'Marker', 'none', 'HitTest', 'off')
scatter3(xyz(:,1), xyz(:,2), xyz(:,3))
view(-37, 28)

如果你想知道绘制三角测量的重点是什么:它是通过模糊后面的点来帮助可视化点云。 “trimesh”调用实现了这一点,因为它仍然以白色绘制面部。

答案 2 :(得分:0)

我的解决方案是将数据光标对象的“SnapToDataVertex”属性设置为“off”。

dc = datacursormode;
set(dc,'SnapToDataVertex','off')

当设置为默认值时,“on”,单击补丁对象会导致数据监视器移动到最接近视线的顶点,即使面部被遮挡也是如此。关闭时,数据采集器移动到视线与最近面相交的点,这通常是我想要的。