2014-07-23 38 views
1

我有拋物線y = a *(x-alpha)*(x-beta)其中a,alpha,beta已知 讓x1,y1爲初始點on上述拋物線。我現在必須從初始點沿弧線覆蓋距離D.目標是在覆蓋所需的弧距後獲得拋物線上的最終位置。查找matlab中沿弧距離點的位置

一種方法是不斷檢查從拋物線的初始位置到終點,並檢查積分是否等於所需的距離。但是這個算法需要很長時間才能完成,因爲我需要多次這樣做。

有沒有更快的方法來做到這一點?

+0

可能更適合http://math.stackexchange.com –

回答

0

好的,拋物線上的線距不是通過積分本身獲得的。爲了方便,我用\ 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是由你目前。如果遇到任何問題,請告訴我。

祝你好運,玩得開心!

0

這是一個非線性方程:給出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 /集成呼叫

+0

其中包含一個整體,這是整個問題的關鍵。我正在研究非整體解決方案。 – EJG89

+0

@ EJG89 - 絕對是 –

+0

試試我的,它不涉及整數 – Inox

0

我有什麼是您使用本作也不知道。但讓我盡力幫你

那麼,這個問題並不是很難解決。我的意思是,這只是一個簡單的線條,在拋物線上積分爲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爲你解決(它不應該永遠持續下去)。