从点到此曲线的最短距离

时间:2013-01-25 22:23:41

标签: c# geometry linear-programming

我需要找到多个点到表格曲线的距离:f(x) = a^(k^(bx))

我的第一个选择是使用它的导数,使用带有导数倒数的形式的一条线,给它Point的坐标并将其与原始曲线相交。最后,我们用简单的几何计算点之间的距离。

这是我通常遵循的数学过程。我需要节省时间(因为我正在做遗传算法程序)所以我需要一种有效的方法来做到这一点。想法?

2 个答案:

答案 0 :(得分:4)

点(c,d)与曲线之间的距离是函数的最小值

sqrt((c-x)^2 + (d-a^(k^(bx)))^2)

为了找到它的最小值,我们可以忘记sqrt并查看一阶导数。找出它的0(它必须是最小距离,因为没有最大距离)。这将为您提供曲线上最近点的x坐标。要获得计算y坐标所需的距离,然后计算到该点的距离(您可以只计算x处的距离函数,这是相同的事情。)

重复你的每一点。

遗憾的是,距离函数的一阶导数是一种婊子。使用Wolfram's derivator,结果希望(如果我没有发生任何复制错误):

dist(x)/dx = 2(b * lna * lnk * k^(bx) * a^(k^(bx)) * (a^(k^(bx)) - d) - c + x)

答案 1 :(得分:0)

要找到从点到曲线的距离,这不是一项简单的任务,因为你需要找到函数enter image description here的全局,其中f(x)是决定曲线的函数。

为了达到这个目标,你可以使用:
 Simplex method
 Nelder_Mead_method
 gradient_descent

此方法在许多库中实施,例如Solver FoundationNMath等。