点と曲線の距離

60 ビュー (過去 30 日間)
Yuki Kaneyasu
Yuki Kaneyasu 2020 年 11 月 25 日
回答済み: Haruki SHIMOTORI 2020 年 12 月 9 日
点(a, b)とn次関数の式が与えられているとき、両者の最短距離を求める方法を教えてください。

回答 (1 件)

Haruki SHIMOTORI
Haruki SHIMOTORI 2020 年 12 月 9 日
厳密解ではありませんが、以下のスクリプトで最小距離に近い値は計算できました。
計算の流れですが、まずn次関数をとして、十分に細かい離散的なxに対するyを計算します。次に、任意の点と先ほど求めたそれぞれとのユークリッド距離を関数で計算します。最後に、ユークリッド距離の最小値を関数で求めます。
厳密な解を求めたいのなら、このサイト(正しいかはわかりませんが)によると、n次関数を微分した関数と任意の点を結ぶ直線が垂直になれば最小の距離らしいです。
clf
x = (-2 : 0.001 : 2)'; % 十分に細かい x のベクトルを定義
y = x.^3 -2 * x; % n次関数を定義
point = [1, 1]; % 任意の点(a, b)を定義
func = [x, y]; % n次関数のxとyの行列
distances = pdist2(func, point); % n次関数の各点と任意の点とのユークリッド距離を計算
min_distance = min(distances); % 最小値を計算
% 以下は可視化処理のため直接関係ありません
hold on
axis equal
plot(x, y, 'b')
scatter(point(1), point(2), '.')
for k = 1:length(x)-1
g = plot([x(k), point(1)], [y(k+1), point(2)], 'g--');
t = text(point(1), point(2), num2str(distances(k)), 'FontSize',10);
drawnow limitrate
if distances(k) <= min_distance % 最小値になったらアニメーションをストップ
break
end
delete(g);
delete(t);
end
以下の画像は可視化の結果です。と点との最小距離はとなりました。

カテゴリ

Help Center および File ExchangeCreating and Concatenating Matrices についてさらに検索

タグ

製品

Community Treasure Hunt

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

Start Hunting!