MATLAB関数を使用して点と曲線の間の最小長さを求めたいですか?曲線は、非常に滑らかではない複雑な関数で記述されます。だから私はこれを計算するmatlabの既存のツールを使用することを願っています。あなたは一人知っていますか?MATLABの点と曲線の間の最小距離を見つけよう
答えて
を説明しているt
(またはx
)の機能を最小限にすることです。そこでいくつかの基本的な考え方について説明します。
曲線が既知の非線形関数である場合は、記号ツールボックスを使用して始めます。例えば、関数y = x^3-3 * x + 5、x、y平面の点(x0、y0)=(4,3)を考えてみましょう。
距離の2乗を書き留めます。ユークリッド距離は簡単に書くことができます。
(x - x0)^2 + (y - y0)^2 = (x - 4)^2 + (x^3 - 3*x + 5 - 3)^2
だから、私はこれを記号的なツールボックスで部分的にやっていきます。最短距離は一次導関数の根にある必要があります。
sym x
distpoly = (x - 4)^2 + (x^3 - 3*x + 5 - 3)^2;
r = roots(diff(distpoly))
r =
-1.9126
-1.2035
1.4629
0.82664 + 0.55369i
0.82664 - 0.55369i
私は複雑なルーツには興味がありません。
r(imag(r) ~= 0) = []
r =
-1.9126
-1.2035
1.4629
距離の最小値はどちらですか?
subs(P,r(1))
ans =
35.5086
subs(P,r(2))
ans =
42.0327
subs(P,r(3))
ans =
6.9875
これは距離の2乗で、ここではリストの最後のルートによって最小化されます。 xの最小位置が与えられれば、y(x)= x^3-3 * x + 5の式に置き換えてyを見つけることができます。
subs('x^3-3*x+5',r(3))
ans =
3.7419
このように単純な関数形式で曲線を書くことができれば、かなり簡単です。平面上の点の集合からのみわかっている曲線については、私のdistance2curveユーティリティを使うことができます。与えられた点に最も近いn次元の空間曲線スプライン補間上の点を見つけることができます。
他の曲線、たとえば楕円については、おそらく極座標に変換することによって解が最も簡単に解決されます。楕円は極角の関数としてパラメトリック形式で簡単に書き込まれます。それが終わったら、前と同じように距離を書いてから微分の根を解いてください。
解決が困難なケースは、機能が非常に滑らかではないと記述されている場合です。このノイズはありますか、それとも微分できない曲線ですか?たとえば、キュービックスプラインはあるレベルでは「あまり滑らかではありません」。区分的線形関数は、ブレーク時に滑らかさが低下します。実際にノイズが含まれているデータポイントがある場合は、ノイズを滑らかにするかどうかを決める必要があります。本質的に平滑化された近似上の最も近い点を探したいのですか、補間された曲線上の最も近い点を探していますか?
データポイントのリストについては、スムージングを行わないことを目標とする場合は、直線補間を使用して、distance2curveユーティリティを再び使用することをお勧めします。計算を自分でやりたいのであれば、十分なデータポイントがあれば、最も近いデータポイント自体を選ぶだけで良い近似を見つけることができますが、データの間隔があまりない場合は近似値が貧弱です。
これらのクラスのいずれかに問題がない場合は、いろいろな方法で問題を解決できる場合がありますが、詳細については、さらに詳しい情報が必要です。
これについては、2つの方法があります。
t = (0:0.1:100)';
minDistance = sqrt(min(sum(bxsfun(@minus, [x(t),y(t)], yourPoint).^2,2)));
:あなたの曲線が合理的に滑らかであり、あなたがあまりにも高い精度を必要としない場合に動作します
簡単な方法は、ポイントの密な数であなたの曲線を評価し、単に最小距離を見つけることです難しい方法は、誰かが私は決してあなたが持っている正確に何を知っていないので、「恋するベーカリー」の答えはいつも、あまりにも複雑になっていると言うとき、距離
distance = @(t)sum((yourPoint - [x(t),y(t)]).^2);
%# you can use the minimum distance from above as a decent starting guess
tAtMin = fminsearch(distance,minDistance);
minDistanceFitte = distance(tAtMin);
- 1. 点と曲線の間の最小距離を見つけるためのPythonコード
- 2. UNITYの直線と曲線との間の最長距離
- 3. Matlab:最小距離を見つける手助け
- 4. R/ImageJ:点と曲線の間の最短距離を測定する
- 5. プロファイル間の最小距離を見つける
- 6. 点と線の間の垂直距離
- 7. マトリックス+ matlabで距離dの近傍を見つけよう
- 8. 距離の和を最小にするために平面内のn点間の点を見つけるアルゴリズム
- 9. 2本の3D線分の最短距離を見つける
- 10. 最小距離のサンプルの一意のペアを見つける
- 11. 他の点のセットとの距離の合計が最小である点を見つける
- 12. 2点間の測地線距離
- 13. ドロー(プロセス)点データとの間の距離によってグラフ(MATLAB)
- 14. グループ、郡別の最小、最大、平均点間距離
- 15. アンドロイド上の2つの距離点の間に線を引く
- 16. nurbs曲線からその制御点までの距離
- 17. 各点から所定の距離内にある点を見つけよう
- 18. ある与えられた点からの距離に沿った線の中間点を見つける
- 19. 補間ラインの交点と補間曲線MathWorks社のMATLAB
- 20. 2点間の最小距離を求める
- 21. 与えられた点から双曲線までの距離
- 22. N点を最小化する点リストとの距離
- 23. 表に最小距離を見つける
- 24. Pythonの2つの点セット間の合計距離を最小にする
- 25. dnaのリストのハミング距離が最小となるk-merを見つける
- 26. gpsで測定できる最小距離は何ですか、移動する2点間の最小距離
- 27. lat-longとポイントとの間の距離を見つける
- 28. Pyproj点と点とポリゴン間の距離
- 29. 線分と3次元の点との最短距離
- 30. unity最小距離と最大距離の間で回転する