Filter löschen
Filter löschen

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

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

Akzeptierte Antwort

Atsushi Ueno
Atsushi Ueno am 23 Mär. 2022
Bearbeitet: Atsushi Ueno am 23 Mär. 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 Kommentare
Atsushi Ueno
Atsushi Ueno am 26 Mär. 2022
「最近傍の面」とは何でしょう。上記リンク先でいうとポリゴン間の最短距離を求める事でしょうか?
nito
nito am 28 Mär. 2022
「点からの距離が最短になるポリゴンとその時の最短距離を求めたい」という意味です.「ある程度xyz座標の近い点が最短距離になるはずだ」という前提で,全探索ではなく,評価するポリゴンを絞って計算したいと考えています

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Hernia Baby
Hernia Baby am 22 Mär. 2022
Bearbeitet: Hernia Baby am 22 Mär. 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の点数'

Kategorien

Mehr zu 計算幾何学 finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!