我想在2D空間中旋轉一個圖形(由線組成)。我使用這種技巧: (1)我在原點翻譯圖形。旋轉點在(0,0) (2)我執行旋轉 (3)我把圖回來使用matplotlib旋轉矩陣使用旋轉矩陣
問題來自我的旋轉功能。不知道爲什麼它不起作用,因爲我使用了旋轉矩陣。您不需要必須查看整個代碼,只需查看「旋轉」功能和「動畫」功能即可。你會看到我發表評論來幫助你。
如果你執行整件事,你會看到一條線緩慢移動。我不知道它是什麼,但它不是預期的結果。我應該看到我的身影旋轉。
如果你不做旋轉,只是翻譯兩次(步驟(1)和步驟(3)我的過程),你會看到整個數字不移動(這是預計,因爲我把它移動到中心和把它放在原來的位置),你可以看到這個圖形的樣子。所以唯一的問題來自旋轉功能。
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import animation
import pylab as pl
import math
#Deplacement de la base pour pouvoir utiliser la matrice de rotation
def center(x,y,c):
for i in range(len(x)):
x[i] = x[i] - c[0]
for i in range(len(y)):
y[i] = y[i] - c[1]
return None
#Remettre la base à sa place
def recenter(x,y,c):
for i in range(len(x)):
x[i] = x[i] + c[0]
for i in range(len(y)):
y[i] = y[i] + c[1]
return None
#Rotation
def rotation(x,y,angle):
my_list = [[],[]]
for i in range(len(x)):
my_list[0].append(x[i]*math.cos(angle) + y[i]*math.sin(angle))
for j in range(len(y)):
my_list[1].append(x[i]*math.sin(angle)*(-1) + y[i]*math.cos(angle))
return my_list
#Here is the rotation matrix
#cos sin
#-sin cos
# First set up the figure, the axis, and the plot element we want to animate
fig = plt.figure()
ax = plt.axes(xlim=(-125, 125), ylim=(-250, 250))
line, = ax.plot([], [], lw=2)
#Les lignes du tableau
plt.plot([0, 125], [50, 50], color='k', linestyle='-', linewidth=2)
plt.plot([0, 125], [200, 200], color='k', linestyle='-', linewidth=2)
plt.plot([17.5, 107.5], [80, 80], color='k', linestyle='-', linewidth=2)
plt.plot([17.5, 107.5], [110, 110], color='k', linestyle='-', linewidth=2)
plt.plot([17.5, 107.5], [140, 140], color='k', linestyle='-', linewidth=2)
plt.plot([17.5, 107.5], [170, 170], color='k', linestyle='-', linewidth=2)
plt.plot([17.5, 17.5], [80, 170], color='k', linestyle='-', linewidth=2)
plt.plot([17.5, 17.5], [80, 170], color='k', linestyle='-', linewidth=2)
plt.plot([47.5, 47.5], [80, 170], color='k', linestyle='-', linewidth=2)
plt.plot([77.5, 77.5], [80, 170], color='k', linestyle='-', linewidth=2)
plt.plot([107.5, 107.5], [80, 170], color='k', linestyle='-', linewidth=2)
# initialization function: plot the background of each frame
def init():
line.set_data([], [])
return line,
# animation function. This is called sequentially
def animate(i):
c1 = 62.5
c2 = 10
pt_rot = (c1, c2) #Point from which I want to rotate
x = [47.5, 47.5, 77.5, 77.5, 47.5, 62.5, c1, 57.5, 67.5]
y = [15, 45, 45, 15, 15, 15, c2, 10, 10]
center(x,y,pt_rot)
#Uncomment these 3 following lines to test the double translation
my_list = rotation(x,y,(i/180))
x = my_list[0]
y = my_list[1]
recenter(x, y, pt_rot)
line.set_data(x,y)
return line,
# call the animator. blit=True means only re-draw the parts that have changed.
anim = animation.FuncAnimation(fig, animate, init_func=init,
frames=200, interval=20, blit=True)
plt.show()
函數'angle_position'的作用是什麼?它從未在腳本中調用過。你問題的最後一段似乎是重要的一段。然而,這也是最不理解的一個。爲什麼翻譯不能移動任何東西呢?整個問題到底是什麼?如果線條旋轉,它應該做什麼,更正?當我運行你的代碼時,我沒有看到任何旋轉。試着在你的問題中寫下「預期的行爲:<一些句子>」和「觀察到的行爲:<一些句子>」來澄清。 – ImportanceOfBeingErnest
對不起,我會在問題中做出更加精確的更改。 –
我想我回答你所有的問題: –