ラインに沿ったオブジェクト グループの移動
この例では、変換を使用して、ラインに沿ってオブジェクトのグループをまとめて移動する方法を説明します。
正弦波をプロットし、軸の範囲モードを手動に設定することで、アニメーションのループ中にその範囲が再計算されないようにします。
x = linspace(-6,6,1000);
y = sin(x);
plot(x,y)
axis manual
変換オブジェクトを作成し、その親を現在の座標軸に設定します。ラインの先頭にマーカーとテキスト注釈をプロットします。その点の y 座標の値をテキストに変換するには、関数 num2str
を使用します。2 つのオブジェクトの親を変換オブジェクトに設定することで、これら 2 つのオブジェクトをグループ化します。
ax = gca; h = hgtransform('Parent',ax); hold on plot(x(1),y(1),'o','Parent',h); hold off t = text(x(1),y(1),num2str(y(1)),'Parent',h,... 'VerticalAlignment','top','FontSize',14);
変換オブジェクトの Matrix
プロパティを更新することで、マーカーおよびテキストをラインに沿って後続の各点に移動します。変換行列を決定するには、ライン上の次の点と最初の点の x 座標および y 座標を使用します。ラインに沿って移動する y 座標の値にテキストを更新していきます。ループを反復するたびに更新内容を画面に表示するには、drawnow
を使用します。
for k = 2:length(x) m = makehgtform('translate',x(k)-x(1),y(k)-y(1),0); h.Matrix = m; t.String = num2str(y(k)); drawnow end
アニメーションでは、マーカーとテキストがラインに沿って一緒に移動する様子が表示されます。
データが大量にある場合は、アニメーションを高速化するために、drawnow
ではなく drawnow limitrate
を使用することもできます。ただし、drawnow limitrate
は画面に一部の更新結果を描画しないことがあります。
参考
hgtransform
| makehgtform
| plot
| drawnow
| axis
| text