Math 匀速绘制极曲线

Math 匀速绘制极曲线,math,animation,graph,polar-coordinates,Math,Animation,Graph,Polar Coordinates,我想画一个正在绘制的极曲线(螺旋)的动画。我正在使用javascript和画布。目前,我正在使用setInterval调用一个draw函数,该函数绘制从极曲线的参数表示中找到的x和y坐标(x和y以θ表示)。我将θ增加0.01,从0增加到2*pi,每次调用draw()一次。问题是,我希望动画在每次调用绘制时绘制相同数量的曲线,以便绘制看起来以一致的速度进行。每次调用绘图之间的时间是否不同并不重要;我只需要在整个awing过程中保持恒定的速度(以绘制的像素/绘制的调用数量为单位)。换句话说,我需要为

我想画一个正在绘制的极曲线(螺旋)的动画。我正在使用javascript和画布。目前,我正在使用setInterval调用一个draw函数,该函数绘制从极曲线的参数表示中找到的x和y坐标(x和y以θ表示)。我将θ增加0.01,从0增加到2*pi,每次调用draw()一次。问题是,我希望动画在每次调用绘制时绘制相同数量的曲线,以便绘制看起来以一致的速度进行。每次调用绘图之间的时间是否不同并不重要;我只需要在整个awing过程中保持恒定的速度(以绘制的像素/绘制的调用数量为单位)。换句话说,我需要为每次调用绘制的极坐标图线段的弧长相同。我不知道该怎么办。如有任何帮助/建议,将不胜感激。谢谢

让f(z)成为您在问题中所指的θ变量。以下是两个参数方程,它们应该与您的方程非常相似:

x(f(z))=f(z)cos(f(z))
y(f(z))=f(z)sin(f(z))

我们可以将f(z)处的位置p(f(z))定义为

p(f(z))=[x(f(z)),y(f(z))]

f(z)处的速度s(f(z))是p在f(z)处的导数的长度

x’(f(z))=f’(z)cos(f(z))-f(z)f’(z)sin(f(z))
y’(f(z))=f’(z)sin(f(z))+f(z)f’(z)cos(f(z))

s(f(z))=长度(p'(f(z)))=长度([x'(f(z)),y'(f(z))]))

=长度([f'(z)cos(f(z))-f(z)f'(z)sin(f(z)),f'(z)sin(f(z))+f(z)f'(z)cos(f(z)))

=sqrt([f'(z)cos(f(z))]2+[f(z)f'(z)sin(f(z))]2+[f'(z)sin(f(z))]2+[f(z)f'(z)cos(f(z))]2)

=sqrt(f'(z)+[f(z)f'(z)]2)

如果你想让速度s(f(z))在C时保持恒定,因为z以1的恒定速率增加,你需要解这个一阶非线性常微分方程:

s(f(z))=sqrt(f’(z)+[f(z)f’(z)]2=C

解决这个问题会得到一个函数θ=f(z),当你不断增加z时,你可以用它来计算θ。然而,这个微分方程没有封闭形式的解


换句话说,你必须猜测每一步增加θ的幅度,对δ进行二进制搜索,将θ和p(t)上的线积分相加,以评估每个猜测移动的距离。

更简单的方法-将参数更改为与步长弧长成比例的setInterval。这样,您就不必尝试反转弧长方程。如果间隔开始变得太大,可以调整步长,但可以大致调整步长

当你做长度(p`(t)),你用的是什么?长度公式从何而来?它只是2向量的标准长度。[x,y]的长度是sqrt(x^2+y^2)。这不只是使到原点的距离以恒定速率增加吗?我希望螺旋线的弧长不断增加,而不是正在绘制的向量的长度。另外,当你做x^2+y^2的时候,你不需要对x和y都做类似于a^2+2ab+b^2的事情,而不仅仅是对每个项进行平方运算吗?看看我刚才添加的图片。在我的数学中,有点不对劲,但很接近。对不起,我很难理解s(t)如何表示螺旋的长度,而不仅仅是向量的长度。另外,我假设你数学中的问题可能是当你做sqrt(x^2+y^2)时;你只是把x和y的每一项都平方,你有一个特定的螺旋吗?它的方程式是什么?