PIVで入手したベクトルデータを使用して,可視化した格子を変形させたい
8 ビュー (過去 30 日間)
古いコメントを表示
OpenPIV-Matlabで32*40=1280個の格子点上の速度ベクトルデータを,取得しています。動画から取得したため,時系列でデータを取得しています。そこで,取得した速度ベクトルデータを変位へ変換して考えて,画面上に作成した格子点を変位分動かす方法を教えていただきたいです。添付画像を参照してください。
2 件のコメント
Atsushi Ueno
2023 年 10 月 8 日
動画において複数の粒子から一つを特定する事は難しいですが、取得済の速度ベクトルデータを扱う事は簡単です。速度ベクトルデータをMATLABの行列データにして、画面上に作成した格子点(これもMATLABの行列データ)に加算すれば良いのです。
回答 (1 件)
Atsushi Ueno
2023 年 10 月 10 日
移動済み: Atsushi Ueno
2023 年 10 月 14 日
例えばこのような例はどうでしょうか。格子状の座標に対し、適当に作った速度←加速度←加加速度を加算しながらプロットを繰り返すと、粒子が動き回る様に見えます。
N = 50; % 格子のサイズ
[rx,ry] = meshgrid(-(N/2-1):N/2,-(N/2-1):N/2); % 格子状の座標を作成
vx = zeros(N,N); vy = zeros(N,N);
ax = zeros(N,N); ay = zeros(N,N);
p = scatter(rx(:),ry(:),1); % 散布図に格子状の座標をプロット
xlim([-N/2,N/2]); ylim([-N/2,N/2]);
for k = 1:100 % 適当な回数繰り返す
kx = (rand(N,N)-0.5)*0.001; % 加加速度をランダムに設定
ky = (rand(N,N)-0.5)*0.001; % 加加速度をランダムに設定
ax = ax + kx; ay = ay + ky; % 加加速度を加速度に加算
vx = vx + ax; vy = vy + ay; % 加速度を速度に加算
rx = rx + vx; ry = ry + vy; % 速度を格子状の座標に加算
p.XData = rx(:); % 加算された格子状の座標をグラフのデータに反映
p.YData = ry(:); % 加算された格子状の座標をグラフのデータに反映
drawnow % グラフを再描画
end
2 件のコメント
Atsushi Ueno
2023 年 10 月 14 日
移動済み: Atsushi Ueno
2023 年 10 月 14 日
>この際、散布図上の各々の点を(i,j)で指定することは出来ますか?
N = 20; i = 11; j = 11; % 格子サイズ、特定の点を指定するインデックス
[rx,ry] = meshgrid(-N/2:N/2,-N/2:N/2); % 格子状の位置座標
xy = cat(3,rx,ry,zeros(N+1,N+1,4)); % XY位置/XY速度/XY加速度
p1 = mesh(zeros(N+1,N+1));
view(2); hold on
p2 = plot3(xy(i,j,1),xy(i,j,2),0,'.','MarkerSize',15);
xlim([-N/2,N/2]); ylim([-N/2,N/2]);
for k = 1:500 % 格子の各点にランダムな加速度を与える
xy(:,:,5:6) = (rand(N+1,N+1,2)-0.5)*0.001; % 加速度
xy(:,:,1:4) = xy(:,:,1:4) + xy(:,:,3:6); % 加速度→速度→位置
p1.XData = xy(:,:,1); p1.YData = xy(:,:,2);
p2.XData = xy(i,j,1); p2.YData = xy(i,j,2);
drawnow % グラフを再描画
end
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!