我想用MATLAB函数来找到点和曲线之间的最小长度?曲线由一个不太平滑的复杂函数来描述。所以我希望使用现有的matlab工具来计算这个。你碰巧知道吗?在MATLAB中找到点和曲线之间的最小距离
回答
当有人说“其复杂的”答案总是过于复杂,因为我从来不知道你有什么。所以我会介绍一些基本的想法。
如果曲线是已知的非线性函数,则使用符号工具箱开始。例如,考虑函数y = x^3-3 * x + 5,以及x,y平面中的点(x0,y0)=(4,3)。
写下距离的平方。欧几里德距离很容易写。
(x - x0)^2 + (y - y0)^2 = (x - 4)^2 + (x^3 - 3*x + 5 - 3)^2
所以,在MATLAB中,我会用符号工具箱来完成这个工作。最小距离必须位于一阶导数的根部。
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
这是距离的平方,这里最小化了列表中的最后一个根。考虑到x的最小位置,当然我们可以通过代入y(x)= x^3-3 * x + 5的表达式来找到y。
subs('x^3-3*x+5',r(3))
ans =
3.7419
因此,如果曲线可以用上面简单的函数形式写出,那么相当容易。对于仅从飞机上的一组点获知的曲线,您可以使用我的distance2curve实用程序。它可以在n维空间曲线样条插值上找到最接近给定点的点。
对于其他曲线,比如说一个椭圆,解决方案可能最容易通过转换为极坐标来解决,其中椭圆很容易以参数形式写成极角的函数。一旦完成,按照以前的方式写出距离,然后求解导数的根。
要解决的一个难题就是函数描述不太平滑的地方。这是噪音还是非微分曲线?例如,三次样条在某个级别上“不太平滑”。分段线性函数在休息时更不平滑。如果您实际上只是有一组数据点,其中有一些噪音,您必须决定是否消除噪音。你是否希望在平滑近似中找到最接近的点,或者你是否正在寻找插值曲线上的最近点?
有关数据点的列表,如果您的目标是不做任何平滑,那么使用线性插值,我的distance2curve实用程序再次是一个不错的选择。如果你想自己做计算,如果你有足够的数据点,那么你可以通过简单地选择最接近的数据点本身来找到一个很好的近似值,但是如果你的数据不是非常接近的话,这可能是一个很差的近似值。
如果你的问题不在于这些类之一,你仍然可以使用各种方法来解决它,但我需要知道更多关于该问题的细节以获得更多帮助。
有两种方法可以解决这个问题。
最简单的方法,如果你的曲线相当平滑,你不需要精密过高,将工作在密集的多个点来评估你的曲线,简单地找到最小距离:
t = (0:0.1:100)';
minDistance = sqrt(min(sum(bxsfun(@minus, [x(t),y(t)], yourPoint).^2,2)));
更困难的办法是尽量减少t
(或x
)函数描述的距离
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. R/ImageJ:测量点和曲线之间的最短距离
- 3. 找到点与曲线之间的距离python
- 4. 如何找到球体上的点与线之间的最小距离
- 5. 找到距离地点最小总距离的点的算法
- 6. 计算matlab中点之间的距离
- 7. Matlab中两点之间的距离
- 8. 计算曲线之间的距离
- 9. Matlab:帮助寻找最小距离
- 10. 找到最小距离
- 11. 查找地图上线条和点之间的距离
- 12. 矩形之间的最小距离
- 13. 点与线之间的垂直距离
- 14. 最小,最大,各组/县之间的平均点距离
- 15. 找到wordnet中synsets之间的距离
- 16. 找到所有点与多边形边界之间的最小距离
- 17. C++中2点之间的最小距离
- 18. 指定infoVis JIT图中节点之间的最小距离
- 19. 最小化Python中两组点之间的总距离
- 20. 多点之间的最短距离
- 21. CLLocationCoordinate2D点之间的查找距离
- 22. 找到一个节点和树的根之间的距离
- 23. 在Python中找到两个gps点之间的距离
- 24. 统一在最小和最大距离之间旋转
- 25. 在R中找到两个栅格图层像素之间的最小距离
- 26. 在线性双链表中找到两个节点之间的距离(C++)
- 27. R/GIS:找到位置和最近线之间的正交距离
- 28. 如何找到两个分离最广的节点之间的距离
- 29. 查找使两组之间的距离最小的像素
- 30. 查找点距离之和来设定其他点的是最小的