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

9 ビュー (過去 30 日間)
nito
nito 2022 年 3 月 22 日
コメント済み: nito 2022 年 3 月 28 日
下図のように2次元配列で表現された2つの表面形状の形状偏差を計算したいと考えています.
(偏差は「形状Aの頂点→形状Bの面」または「形状Aの頂点→形状Bの頂点」間の符号付距離を想定してます)
何か良い方法はありますでしょうか?

採用された回答

Atsushi Ueno
Atsushi Ueno 2022 年 3 月 23 日
編集済み: Atsushi Ueno 2022 年 3 月 23 日
回答の例と図示は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 件のコメント
Atsushi Ueno
Atsushi Ueno 2022 年 3 月 26 日
「最近傍の面」とは何でしょう。上記リンク先でいうとポリゴン間の最短距離を求める事でしょうか?
nito
nito 2022 年 3 月 28 日
「点からの距離が最短になるポリゴンとその時の最短距離を求めたい」という意味です.「ある程度xyz座標の近い点が最短距離になるはずだ」という前提で,全探索ではなく,評価するポリゴンを絞って計算したいと考えています

サインインしてコメントする。

その他の回答 (1 件)

Hernia Baby
Hernia Baby 2022 年 3 月 22 日
編集済み: Hernia Baby 2022 年 3 月 22 日
点数が一緒であるなら、三平方の定理は使えませんか?
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の点数'

カテゴリ

Help Center および File Exchange計算幾何学 についてさらに検索

Community Treasure Hunt

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

Start Hunting!