필터 지우기
필터 지우기

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

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

댓글을 달려면 로그인하십시오.

답변 (1개)

Atsushi Ueno
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
巧 平山
巧 平山 2023년 10월 11일
이동: Atsushi Ueno 2023년 10월 14일
ご返信有難うございます。
散布図を利用してこんなことが出来るとは驚きです!
この際、散布図上の各々の点を(i,j)で指定することは出来ますか?
Atsushi Ueno
Atsushi Ueno 2023년 10월 14일
이동: Atsushi Ueno 2023년 10월 14일
>この際、散布図上の各々の点を(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

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 プログラミング에 대해 자세히 알아보기

태그

제품


릴리스

R2023a

Community Treasure Hunt

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

Start Hunting!