3

MATLAB R2011b のデータ カーソルを三角形分割された 3D サーフェスのプロットに適用すると、不安定な動作が見られます: 特定の点をクリックすると、代わりに完全に異なる点が選択されます。円柱の例:

[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)

次に、データ カーソル モードを有効にして、前の列の 1 つの一番上のドットを選択してみます。私のインストールでは、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」を「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' 呼び出しは、顔を白で描画するため、これを実現します。

于 2013-07-04T15:33:23.987 に答える