如何解决将一条线旋转到负坐标
我正在尝试使用以下函数旋转一条线:
def rotate_line(line,theta):
angle_cos = numpy.cos(theta)
angle_sin = numpy.sin(theta)
ox,oy = line[0]
for i in range(len(line)):
px,py = line[i]
qx = ox + angle_cos * (px - ox) - angle_sin * (py - oy)
qy = oy + angle_sin * (px - ox) + angle_cos * (py - oy)
line[i] = numpy.array([qx,qy])
return line
但我得到了这个结果(红色 - 原始,橙色 - 旋转),而不是预期的结果:
我尝试了各种其他功能,但所有这些功能都给我相同的错误结果。为什么?
测试代码:
line = numpy.array([[1,1],[2,2],[3,3]])
print(line)
ax = plt.subplot()
ax.scatter(1,1,color = 'green')
ax.plot(line[:,0].tolist(),line[:,1].tolist(),color = 'red')
line = rotate_line(line,numpy.deg2rad(90))
print(line)
ax.plot(line[:,color = 'orange')
解决方法
您代码中的问题在于您修改了 line
函数中的原始 rotate_line
。您需要引入一个新变量(例如new_line
)来记录正交线的坐标。例如,您可以这样做:
import matplotlib.pyplot as plt
import numpy as np
def rotate_line(line,theta):
angle_cos = np.cos(theta)
angle_sin = np.sin(theta)
ox,oy = line[0]
new_line = np.zeros((line.shape[0],line.shape[1]))
for i in range(len(line)):
px,py = line[i]
qx = ox + angle_cos * (px - ox) - angle_sin * (py - oy)
qy = oy + angle_sin * (px - ox) + angle_cos * (py - oy)
new_line[i] = np.array([qx,qy])
return new_line
line = np.array([[1,1],[2,2],[3,3]])
print(line)
ax = plt.subplot()
ax.scatter(1,1,color='green')
ax.plot(line[:,0].tolist(),line[:,1].tolist(),color='red')
line = rotate_line(line,np.deg2rad(90))
print(line)
ax.plot(line[:,color='orange')
plt.axis('scaled')
plt.show()
输出:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。