我有抛物线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 –