我正在用一台特殊的照相机以1s的固定时间间隔测量一个物体的x,y坐标(单位:cm)。我有一个numpy数组中的数据:
a = np.array([ [ 0. , 0. ],[ 0.3 , 0. ],[ 1.25, -0.1 ],[ 2.1 , -0.9 ],[ 2.85, -2.3 ],[ 3.8 , -3.95],[ 5. , -5.75],[ 6.4 , -7.8 ],[ 8.05, -9.9 ],[ 9.9 , -11.6 ],[ 12.05, -12.85],[ 14.25, -13.7 ],[ 16.5 , -13.8 ],[ 19.25, -13.35],[ 21.3 , -12.2 ],[ 22.8 , -10.5 ],[ 23.55, -8.15],[ 22.95, -6.1 ],[ 21.35, -3.95],[ 19.1 , -1.9 ]])
曲线是这样的:
plt.scatter(a[:,0], a[:,1])
问题:
如何计算每个点的切向和径向偏差矢量?我发现了一些可能相关的公式:
我可以很容易地用np.diff(a, axis=0)
计算vx
和vy
投影,但是我是一个numpy/python的noob,继续下去是远远超出我的能力的。如果我能计算出每个点的曲率,我的问题也就解决了。有人能帮忙吗?
编辑:我在几个小时内断断续续地给出了这个答案,因此我错过了您最近的编辑,表明您只需要曲率。希望这个答案无论如何都会有帮助。
除了做一些曲线拟合,我们逼近导数的方法是通过finite differences。谢天谢地,} 方法,它为我们进行这些差异计算,为每个内部点计算上下两个坡度的平均值,让每个端点单独存在等等
numpy
有一个^{现在,我们计算每个变量的导数,然后把它们放在一起(出于某种原因,如果我们只调用
np.gradient(a)
,我们会得到一个数组列表……不确定上面发生了什么,但我现在就解决它):这为
velocity
提供了以下向量:这在浏览
a
的散点图时是有意义的。现在,对于速度,我们取速度向量的长度。然而,有一件事我们并没有真正记住:一切都是
t
的函数。因此,ds/dt
实际上是t
的标量函数(与t
的向量函数相反),就像dx/dt
和dy/dt
。因此,我们将ds_dt
表示为一个numpy
值数组,每个值对应于每秒速度的近似值:这将生成以下数组:
同样,当你观察
a
的散点图上的点之间的间隙时,这也有一定的意义:物体会加快速度,在拐弯时稍微减速,然后再加速。现在,为了找到单位切向量,我们需要对
ds_dt
进行一个小的变换,使其大小与velocity
的大小相同(这有效地允许我们将向量值函数velocity
除以标量函数ds_dt
):这将生成以下
numpy
数组:注意两件事:1。在
t
的每个值处,tangent
指向与velocity
和2相同的方向。在t
的每个值处,tangent
是一个单位向量。事实上:在[12]中:
现在,由于我们取切向量的导数并除以它的长度来得到单位法向量,所以我们做同样的技巧(为了方便,分离
tangent
的成分):这为
normal
提供了以下向量:请注意,法向量表示曲线旋转的方向。当与
a
的散点图一起查看时,上面的向量是有意义的。特别是,我们在第五个点之后从向下转到向上,在第十二个点之后开始向左(相对于x轴)转弯。最后,为了得到加速度的切向分量和法向分量,我们需要
s
、x
和y
相对于t
的二阶导数,然后我们可以得到曲率和其他分量(记住它们都是t
的标量函数):相关问题 更多 >
编程相关推荐