python中的旋转矩阵

时间:2016-02-02 18:07:26

标签: python arrays matrix rotation

注意:我在stats.Stackexchange.com上发布了类似的问题:https://stats.stackexchange.com/questions/193723/linear-regression-after-rotation

我遇到了以下问题,我无法弄清楚我做错了什么。

我有2组点,分为2个不同的数组:vecta和vectb。

Vectb是vecta的旋转和平移的结果。

我希望找到基于vecta和vectb的旋转和翻译:

对于翻译,很容易:T =重心(vecta) - 重心(vectb)

其中重心是一个函数,它给出了每组点的重心。

对于旋转我使用新向量:

  • vecta_ = vecta-重心(vecta)
  • vectb_ = vectb-重心(vectb)

我对这两组点进行线性回归,然后旋转vectb得到一个。

但我无法理解为什么我的结果不是我排除的结果。

下面是我的python代码:

#center sets of points
vecta=vecta-array(barycentre(vecta))
vectb=vectb-array(barycentre(vectb))

#Linear regression on each set of points
coef1=polyfit(vecta[:,0],vecta[:,1],1)
coef2=polyfit(vectb[:,0],vectb[:,1],1)

#calculating the angle
angle1=atan2(coef1_[0],1)#coef1_[1] is the intercept, equal to 0 
angle2=atan2(coef2_[0],1)
angle=angle1-angle2

我尝试使用相同的示例检索角度但使用vectb =旋转vect a

#center sets of points
vecta=vecta-array(barycentre(vecta))
angle=pi/6
rotMatrix = array([[cos(angle), -sin(angle)],[sin(angle),  cos(angle)]])
vectb=rotMatrix.dot(vecta.transpose()).transpose()

#Linear regression on each set of points
coef1=polyfit(vecta[:,0],vecta[:,1],1)
coef2=polyfit(vectb[:,0],vectb[:,1],1)

#calculating the angle
angle1=atan2(coef1_[0],1)
angle2=atan2(coef2_[0],1)
angle=angle1-angle2

但我没有按预期获得pi / 6

我得到的角度很小,就像我错过了解我得到的角度。我在角度计算中做错了吗?

0 个答案:

没有答案