Azzera filtri
Azzera filtri

PIVで入手したベク​トルデータを使用して​,可視化した格子を変​形させたい

8 visualizzazioni (ultimi 30 giorni)
巧 平山
巧 平山 il 5 Ott 2023
Spostato: Atsushi Ueno il 14 Ott 2023
OpenPIV-Matlabで32*40=1280個の格子点上の速度ベクトルデータを,取得しています。動画から取得したため,時系列でデータを取得しています。そこで,取得した速度ベクトルデータを変位へ変換して考えて,画面上に作成した格子点を変位分動かす方法を教えていただきたいです。添付画像を参照してください。
  2 Commenti
Atsushi Ueno
Atsushi Ueno il 8 Ott 2023
動画において複数の粒子から一つを特定する事は難しいですが、取得済の速度ベクトルデータを扱う事は簡単です。速度ベクトルデータをMATLABの行列データにして、画面上に作成した格子点(これもMATLABの行列データ)に加算すれば良いのです。
巧 平山
巧 平山 il 10 Ott 2023
画面上に作成した格子点をプロットのように可視化するにはどのようにしたら良いですか?なにか使用すべきコードがあれば教えてください。

Accedi per commentare.

Risposte (1)

Atsushi Ueno
Atsushi Ueno il 10 Ott 2023
Spostato: Atsushi Ueno il 14 Ott 2023
例えばこのような例はどうでしょうか。格子状の座標に対し、適当に作った速度←加速度←加加速度を加算しながらプロットを繰り返すと、粒子が動き回る様に見えます。
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 Commenti
巧 平山
巧 平山 il 11 Ott 2023
Spostato: Atsushi Ueno il 14 Ott 2023
ご返信有難うございます。
散布図を利用してこんなことが出来るとは驚きです!
この際、散布図上の各々の点を(i,j)で指定することは出来ますか?
Atsushi Ueno
Atsushi Ueno il 14 Ott 2023
Spostato: Atsushi Ueno il 14 Ott 2023
>この際、散布図上の各々の点を(i,j)で指定することは出来ますか?
散布図(scatter)上において特定の点を指定する方法は見つかりませんが、別の方法で描画すれば問題ありません。
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

Accedi per commentare.

Categorie

Scopri di più su プログラミング in Help Center e File Exchange

Tag

Prodotti


Release

R2023a

Community Treasure Hunt

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

Start Hunting!