首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中旋转(并转换)一组点的最佳方法

在python中旋转(并转换)一组点的最佳方法
EN

Stack Overflow用户
提问于 2022-11-21 13:49:29
回答 1查看 34关注 0票数 1

我有两组点(x,y)用matplotlib绘制的

从视觉上看,我可以看到,它们之间似乎有某种旋转。

我想围绕某个点旋转一组点(想尝试几个旋转点),然后再绘制它们。

用python旋转一组点的最佳方法是什么?

我已经读过,也许可以使用外形,但一个简单的例子可以帮助我理解如何。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-21 14:08:16

使用numpy存储点

例如,如果您有一个nx2数组,那么每一行都是一个点,如下所示

代码语言:javascript
复制
xy=np.array([[50, 60],
             [10, 30],
             [30, 10]])

你可以这样画它们

代码语言:javascript
复制
plt.scatter(xy[:,0], xy[:,1])

要旋转它们,你需要一个旋转矩阵

代码语言:javascript
复制
def rotateMatrix(a):
    return np.array([[np.cos(a), -np.sin(a)], [np.sin(a), np.cos(a)]])

您可以将此矩阵应用于您的xy点集,如下所示

代码语言:javascript
复制
newxy = xy @ rotateMatrix(a).T

请注意,我转换旋转矩阵,以保持敏锐。但是,在这种情况下,由于旋转矩阵的特定形式,您可以通过传递-a直接生成转置矩阵。

代码语言:javascript
复制
newxy = xy @ rotateMatrix(-a)

如果您不需要围绕中心旋转(x0,y0)而不是(0,0),只需旋转,而不是xy-(x0,y0) (即从中心到点的位移向量),然后将旋转的向量添加到中心。

代码语言:javascript
复制
newxy = (xy-[x0,y0]) @ rotateMatrix(-a) + [x0,y0]

应用程序

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import matplotlib
import time

def rotateMatrix(a):
    return np.array([[np.cos(a), -np.sin(a)], [np.sin(a), np.cos(a)]])

xy=np.random.randint(0,100, (200,2))

fig=plt.figure()
plt.plot(xy[:,0], xy[:,1], 'o')
plt.xlim(-30,130)
plt.ylim(-50,110)

plotdata,=plt.plot(xy[:,0], xy[:,1],'o')

x0=20
y0=50

def anim(i):
   newxy=(xy-[x0,y0]) @ rotateMatrix(-2*i*np.pi/180) + [x0,y0]
   plotdata.set_data(newxy[:,0], newxy[:,1])
   return [plotdata]

theAnim=animation.FuncAnimation(fig, anim, interval=40, blit=False, frames=360, repeat=False)
#theAnim.save('rotate.nosync.gif')
plt.show()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74519927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档