3

当应用于三角 3d 曲面图时,我看到 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 不会选择光标下的点,而是随机选择一个不同的点。

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

4

3 回答 3

1

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

于 2013-07-03T13:51:19.500 回答
1

我在Jochen Rau 的 File Exchange 贡献中找到了解决此问题的方法。您可以通过“HitTest”属性定义哪些数据可以用数据光标选择。因此,对于我提供的示例,我只想选择标记,解决方案是绘制没有标记的网格并将“HitTest”设置为“关闭”,然后使用“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' 调用实现了这一点,因为它仍然将面绘制为白色。

于 2013-07-04T15:33:23.987 回答
0

我的一个解决方案是将数据游标对象的“SnapToDataVertex”属性设置为“关闭”。

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

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

于 2015-04-30T06:38:27.887 回答