注意:我在stats.Stackexchange.com上发布了类似的问题:https://stats.stackexchange.com/questions/193723/linear-regression-after-rotation
我遇到了以下问题,我无法弄清楚我做错了什么。
我有2组点,分为2个不同的数组:vecta和vectb。
Vectb是vecta的旋转和平移的结果。
我希望找到基于vecta和vectb的旋转和翻译:
对于翻译,很容易:T =重心(vecta) - 重心(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
我得到的角度很小,就像我错过了解我得到的角度。我在角度计算中做错了吗?