アニメーションで動く図形の作成方法について

39 views (last 30 days)
irosy
irosy on 18 Feb 2023
Commented: irosy on 18 Feb 2023
以前こちらで質問した内容の踏襲となります.添付の画像のような正方形とその重心からでてくる矢印で表したいのですが,教えていただいたプログラムですと円を4分割して正方形の形にはできたものの,正方形自身は回転しないため困っています.恐縮ですがどなたかご助言お願い致します.

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 18 Feb 2023
>円を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
  1 Comment
irosy
irosy on 18 Feb 2023
大変助かりました!私事ですがこれでようやく大学の卒業論文の資料を完成させることができたので感謝してもし尽くせません.本当にありがとうございました!

Sign in to comment.

More Answers (0)

Products


Release

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!