python实现一个点绕另一个点旋转后的坐标
如下所示:
(x,y)为要转的点,(pointx,pointy)为中心点,如果顺时针角度为angle
srx=(x-pointx)*cos(angle)+(y-pointy)*sin(angle)+pointx
sry=(y-pointy)*cos(angle)-(x-pointx)*sin(angle)+pointy
(x,y)为要转的点,(pointx,pointy)为中心点,如果逆时针角度为angle
nrx=(x-pointx)*cos(angle)-(y-pointy)*sin(angle)+pointx
nry=(x-pointx)*sin(angle)+(y-pointy)*cos(angle)+pointy
importnumpyasnp importmath importmatplotlib.pyplotasplt #绕pointx,pointy逆时针旋转 defNrotate(angle,valuex,valuey,pointx,pointy): valuex=np.array(valuex) valuey=np.array(valuey) nRotatex=(valuex-pointx)*math.cos(angle)-(valuey-pointy)*math.sin(angle)+pointx nRotatey=(valuex-pointx)*math.sin(angle)+(valuey-pointy)*math.cos(angle)+pointy returnnRotatex,nRotatey #绕pointx,pointy顺时针旋转 defSrotate(angle,valuex,valuey,pointx,pointy): valuex=np.array(valuex) valuey=np.array(valuey) sRotatex=(valuex-pointx)*math.cos(angle)+(valuey-pointy)*math.sin(angle)+pointx sRotatey=(valuey-pointy)*math.cos(angle)-(valuex-pointx)*math.sin(angle)+pointy returnsRotatex,sRotatey pointx=1 pointy=1 sPointx,sPointy=Nrotate(math.radians(45),pointx,pointy,0,0) print(sPointx,sPointy) plt.plot([0,pointx],[0,pointy]) plt.plot([0,sPointx],[0,sPointy]) plt.xlim(-3.,3.) plt.ylim(-3.,3.) plt.xticks(np.arange(-3.,3.,1)) plt.yticks(np.arange(-3.,3.,1)) plt.show()
importnumpyasnp importmath importmatplotlib.pyplotasplt #绕pointx,pointy逆时针旋转 defNrotate(angle,valuex,valuey,pointx,pointy): valuex=np.array(valuex) valuey=np.array(valuey) nRotatex=(valuex-pointx)*math.cos(angle)-(valuey-pointy)*math.sin(angle)+pointx nRotatey=(valuex-pointx)*math.sin(angle)+(valuey-pointy)*math.cos(angle)+pointy returnnRotatex,nRotatey #绕pointx,pointy顺时针旋转 defSrotate(angle,valuex,valuey,pointx,pointy): valuex=np.array(valuex) valuey=np.array(valuey) sRotatex=(valuex-pointx)*math.cos(angle)+(valuey-pointy)*math.sin(angle)+pointx sRotatey=(valuey-pointy)*math.cos(angle)-(valuex-pointx)*math.sin(angle)+pointy returnsRotatex,sRotatey x1=np.array([1,2,3]) y1=np.array([1,2,3]) x2=np.array([3,6]) y2=np.array([2,1]) #x2往x1上拼 disx=x2[0]-x1[0] disy=y2[0]-y1[0] removeX2=x2-disx removeY2=y2-disy tany1=y1[-1]-y1[0] tanx1=x1[-1]-x1[0] angle1=math.degrees(np.arctan(tany1/tanx1)) tany2=y2[-1]-y2[0] tanx2=x2[-1]-x2[0] angle2=math.degrees(np.arctan(tany2/tanx2)) disAngle=angle2-angle1 print(angle1) print(angle2) print(disAngle) ifdisAngle<0: rotateX,rotateY=Nrotate(math.radians(abs(disAngle)),removeX2,removeY2,x1[0],y1[0]) else: rotateX,rotateY=Srotate(math.radians(abs(disAngle)),removeX2,removeY2,x1[0],y1[0]) plt.plot(x1,y1,color='red') plt.plot(removeX2,removeY2,color='green') plt.scatter(rotateX,rotateY,color='yellow') plt.xlim(0.,10.) plt.ylim(0.,10.) plt.xticks(np.arange(0.,10.,1)) plt.yticks(np.arange(0.,10.,1)) plt.show()
以上这篇python实现一个点绕另一个点旋转后的坐标就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。