我有拋物線y = a *(x-alpha)*(x-beta)其中a,alpha,beta已知 讓x1,y1爲初始點on上述拋物線。我現在必須從初始點沿弧線覆蓋距離D.目標是在覆蓋所需的弧距後獲得拋物線上的最終位置。查找matlab中沿弧距離點的位置
一種方法是不斷檢查從拋物線的初始位置到終點,並檢查積分是否等於所需的距離。但是這個算法需要很長時間才能完成,因爲我需要多次這樣做。
有沒有更快的方法來做到這一點?
我有拋物線y = a *(x-alpha)*(x-beta)其中a,alpha,beta已知 讓x1,y1爲初始點on上述拋物線。我現在必須從初始點沿弧線覆蓋距離D.目標是在覆蓋所需的弧距後獲得拋物線上的最終位置。查找matlab中沿弧距離點的位置
一種方法是不斷檢查從拋物線的初始位置到終點,並檢查積分是否等於所需的距離。但是這個算法需要很長時間才能完成,因爲我需要多次這樣做。
有沒有更快的方法來做到這一點?
好的,拋物線上的線距不是通過積分本身獲得的。爲了方便,我用\ gamma替換了您的a。
y = gamma(x-alpha)(x-beta) -> gamma*x^2 + (-gamma*alpha - gamma*beta)*x + alpha*beta*gamma
替換:
a = gamma
b = -gamma*alpha - gamma*beta
c = alpha*beta*gamma
所以可以寫成:
f = (1-D)/(4*a) - (-D)/(4*a)
在:
y = a*x^2 + b*x + c
從這個公式(拋物線)的焦點f
由下式確定其中
d = B^2 - 4 *一個* C
現在首先定義p
從一個位置曲線上對稱x_p
的垂直軸線的垂直距離:
P = -b/(2 * a) - x_p;
從這個弧長的計算方法是:
h = p/2
q = sqrt(f^2+h^2)
s = h*q/f + f* ln (h*q/f)
其中S是你的曲線paramatric表示。
Distance = s_1 - s_2 = (h_1*q_1/f + f * ln (h_1*q_1/f)) - (h_2*q_2/f + f * ln (h_2*q_2/f))
隨着一些簡化:曲線的長度是通過使用兩個點秒,然後在這些點之間的距離,所以發現
Distance = (h_1*q_1 - h_2*q_2)/f + f* ln ((h_1 + q_1)/(h_2 + q_2))
要完全實現它在MATLAB是由你目前。如果遇到任何問題,請告訴我。
祝你好運,玩得開心!
這是一個非線性方程:給出x1,y1並尋找x2,y2。 x2和y2必須滿足拋物線方程,並且它們必須沿曲線滿足arclength方程。 http://en.wikibooks.org/wiki/Calculus/Arc_length
因此,積分給你第二個等式。現在你有兩個方程和兩個未知數 - 查找MATLAB fsolve http://www.mathworks.se/help/optim/ug/fsolve.html
假設積分不能分析解決然後就解決它使用數字整合(可以嗎?) - 仍然應該不僅僅是蠻力搜索快得多。 ..
如果你需要做很多次,確保以前的解決方案,給出作爲初始猜測下一個fsolve /集成呼叫
我有什麼是您使用本作也不知道。但讓我盡力幫你
那麼,這個問題並不是很難解決。我的意思是,這只是一個簡單的線條,在拋物線上積分爲1。對你有好處,這是以前完成的。 http://en.wikipedia.org/wiki/Arc_length#Length_of_an_arc_of_a_parabola
所有你需要做的是找到對稱軸,不難,X =(alpha + beta)/ 2,焦點長度(有點棘手,但如果你谷歌,我相信你會發現它)。我找到了你。 https://math.stackexchange.com/questions/574688/what-is-the-focal-width-of-a-parabola顯示了拋物線的規範形式,所以你所需要做的就是計算你的公式(http://www.math-prof.com/Alg2/Alg2_Ch_40.asp)
現在你需要解決的方程並不漂亮。把所有的東西都用p來表示,讓MatLab爲你解決(它不應該永遠持續下去)。
可能更適合http://math.stackexchange.com –