2013-07-03 43 views
3

當應用於三角化3d表面的圖時,我看到來自MATLAB R2011b中數據光標的不穩定行爲:點擊某些點代替完全不同的點。氣缸示例:MATLAB中三角化3d表面的不規則數據光標行爲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不會選擇光標下的點,而是隨機選擇一個不同的點。

這是一個錯誤還是我做錯了什麼?

回答

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'電話完成了這一點,因爲它仍然以白色繪製臉部。

+0

很好,HitTest屬性看起來很有用。 –

1

我認爲這是因爲你的網格中有這麼多行;如果您刪除'linestyle','none'並繪製一小部分網格(例如使用[r, phi, h] = meshgrid(1, 0:pi/10:2*pi, 0:0.5:1); as your first line,則可以看到它們正在穿過您的圓柱體。數據光標模式將轉到您點擊的線條上最近的頂點,所以如果你點擊一個隱藏在臉下的線,它可能會跳到該線上的一個頂點,而不僅僅是你已經看到的點。我不確定是否有一種簡單的方法來改變這種行爲。

+0

感謝您的提示,它將我推向了正確的方向。見下文。 –

0

對我來說,解決方案是將數據光標對象的「SnapToDataVertex」屬性設置爲「off」。

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

當設置爲默認值,「上」,點擊補丁對象上引起datacursor移動到最近的視線頂點,即使臉被遮擋。關閉時,數據光標會移動到視線與最近的臉相交的點,這通常是我想要的。