我有一个抛物线y = a *(x-alpha)*(x-beta)其中a,alpha,beta是已知的 令x1,y1为上述抛物线的初始点。我现在必须从初始点开始沿弧线覆盖距离D.目的是在覆盖所需的弧距后,在抛物线上获得最终位置。
一种方法是从抛物线的初始位置到终点进行检查,并检查积分是否等于所需的距离。但是这个算法需要很长时间才能完成,因为我需要多次这样做。
有更快的方法吗?
答案 0 :(得分: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 / integrate调用的初始猜测而提供的
答案 1 :(得分: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为你解决(不应该永远)。
答案 2 :(得分:0)
好的,通过积分本身不能获得抛物线上的线距。为方便起见,我用\ gamma替换了你的。
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
所以可以写:
y = a*x^2 + b*x + c
根据这个公式(抛物线),焦点f
由下式确定:
f = (1-D)/(4*a) - (-D)/(4*a)
其中
D = b ^ 2 - 4 * a * 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是曲线的对称表示。通过使用两个点s然后是这些点之间的距离来找到曲线的长度,所以:
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中完全实现它现在取决于你。如果您遇到任何问题,请告诉我。
祝你好运,玩得开心!