アニメーションで動く図形の作成方法について
10 ビュー (過去 30 日間)
古いコメントを表示
以前こちらで質問した内容の踏襲となります.添付の画像のような正方形とその重心からでてくる矢印で表したいのですが,教えていただいたプログラムですと円を4分割して正方形の形にはできたものの,正方形自身は回転しないため困っています.恐縮ですがどなたかご助言お願い致します.
0 件のコメント
採用された回答
Atsushi Ueno
2023 年 2 月 18 日
>円を4分割して正方形の形にはできたものの
「円を描画する座標の角度分解能(0:pi/N:2*pi)において、Nの値を大きくすれば滑らかな円に、逆にNの値を小さくすれば多角形になりますが、N=2 (角度分解能:90°)とすれば円ではなく正方形になる」という意味だと認識しました。
>正方形自身は回転しないため困っています
以前の回答ではxp,ypは1行13列で、円(実は12角形)を回転させずに描画していました。
今回はN行5列(N行はx,y,tの長さ)(5列は四角形+1の座標)で、四角形を矢印と同様に回転させて描画しました。
更に pi/4 加算したのは四角形を45°回転させる為です。(四角形の角でなく面を前向きにする事に拘っただけ)
x = linspace(0,10,1000);
y = sin(x);
t = atan(cos(x));
xp = cos(t' + pi/4 + (0:pi/2:2*pi)); % 変更:経路に沿った四角形の相対座標を予め計算しておく
yp = sin(t' + pi/4 + (0:pi/2:2*pi)); % 変更:経路に沿った四角形の相対座標を予め計算しておく
plot(x,y)
hold on
p = plot(x(1)+xp(1,:),y(1)+yp(1,:),'r'); % 変更:最初の位置と角度で四角形を描画する
q = quiver(x(1),y(1),cos(t(1)),sin(t(1)));
hold off
xlim([0 10]);
ylim([-3 3]);
axis manual
for k = 2:length(x)
p.XData = x(k)+xp(k,:); % 変更:四角形の座標データを経路上の位置と角度で更新する
p.YData = y(k)+yp(k,:); % 変更:四角形の座標データを経路上の位置と角度で更新する
q.XData = x(k);
q.YData = y(k);
q.UData = cos(t(k));
q.VData = sin(t(k));
drawnow
end
その他の回答 (0 件)
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!