1. 程式人生 > >求點到曲線的最短距離 垂直逼近演算法

求點到曲線的最短距離 垂直逼近演算法

y = ln(x) + Math.pow(x,0.000333) + Math.exp(x*x) + x *x

求 (1,2)到該曲線的最短距離。很簡單就是  Math.pow((y - 2)*(y - 2) + (x-1)(x-1),0.5)  

求最大值或求導無法求得此距離。或者是  (y-2)/(x-1)  * y' = -1  

這個時候就需要利用演算法來求得此距離。

這裡引入垂直逼近的概念

思想是假定一個切點與此點垂直,那麼逐漸的向真的切點靠近,知道與真實切點的誤差在一個很小的誤差範圍內

這個時候得到的此點即為  切點,求出距離很容易

具體步驟是:

假定當前點x  在曲線上的點為 假定切點,對曲線做一條切線,然後此點對x做一條垂直線,此垂點為下一個假定切點再迭代下去,直到最後此垂直點越來越接近曲線。然後直到曲線上,那麼此點位真實的切點。

求得的距離為最短距離

這裡不適合多個垂直的情況。。。針對此情況很簡單比較下就行了