2014-07-23 35 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为你解决(它不应该永远持续下去)。