m×n行列で表現される表面形状の形状偏差

7 views (last 30 days)
nito
nito on 22 Mar 2022
Commented: nito on 28 Mar 2022
下図のように2次元配列で表現された2つの表面形状の形状偏差を計算したいと考えています.
(偏差は「形状Aの頂点→形状Bの面」または「形状Aの頂点→形状Bの頂点」間の符号付距離を想定してます)
何か良い方法はありますでしょうか?

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 23 Mar 2022
Edited: Atsushi Ueno on 23 Mar 2022
回答の例と図示は2次元で進めます。下記のグラフで一目瞭然と思います。3次元でも同じです。
x = (0:pi/20:pi)';
A = sin(x); % Aは正弦波(青い太線)
B = A + rand(size(x)) - 0.5; % BはAにランダムな偏差を乗せた波形(オレンジの太線)
plot(x,A,'o-',x,B,'o-','LineWidth',2); hold on;
[k,dist] = dsearchn([x A],[x B]);
dist = dist .* sign(B-A(k)); % 距離は符号無し⇒y軸方向の大小関係で符号をつける
line([x';x(k)'],[B';A(k)']); % 形状Aの頂点→形状Bの頂点に向け細線を引く
dist' % 偏差「形状Bの頂点→形状Aの頂点」間の符号付距離を想定してます)
ans = 1×21
0.2259 -0.1620 0.1144 0.0353 -0.2205 -0.1621 0.3297 0.1693 -0.0196 -0.3136 -0.1617 0.0585 0.2891 0.4660 -0.2704 0.1214 0.0969 0.0374 -0.3454 -0.0062 -0.0593
  7 Comments
nito
nito on 28 Mar 2022
「点からの距離が最短になるポリゴンとその時の最短距離を求めたい」という意味です.「ある程度xyz座標の近い点が最短距離になるはずだ」という前提で,全探索ではなく,評価するポリゴンを絞って計算したいと考えています

Sign in to comment.

More Answers (1)

Hernia Baby
Hernia Baby on 22 Mar 2022
Edited: Hernia Baby on 22 Mar 2022
点数が一緒であるなら、三平方の定理は使えませんか?
clc,clear;
[X,Y,Z] = peaks(50);
X1 = X + 0.1*randi([-1 1],size(X));
Y1 = Y + 0.1*randi([-1 1],size(Y));
Z1 = Z;
Z1(10:20,10:20) = Z1(10:20,10:20) + randi([-1,1],size(Z1(10:20,10:20)));
surf(X,Y,Z,'EdgeColor','none')
colormap('gray')
hold on
scatter3(X1,Y1,Z1,'red','x')
距離を算出して各格子点でどれだけ離れているかをプロットします
R = sqrt((X-X1).^2+(Y-Y1).^2+(Z-Z1).^2);
figure
surf(R,'EdgeColor','none')
view(2)
xlabel 'xの点数'
ylabel 'yの点数'
追記:符号
おそらくz軸で正負判定を決めているのでしょうか
それでしたら以下のようになります
R = R*sign(Z-Z1);
figure
surf(R,'EdgeColor','none')
view(2)
xlabel 'xの点数'
ylabel 'yの点数'

Community Treasure Hunt

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

Start Hunting!