我是新來的python和圖形,但之前已編程。據http://en.wikipedia.org/wiki/Transformation_matrix#Rotation,順時針方向旋轉2d形狀
對於由θ 逆時針繞原點的角度旋轉時, 函數形式爲x '=xcosθ - ysinθ 和y'=xsinθ+ycosθ
但下面python代碼以順時針方向旋轉它。有人可以解釋這一點嗎?還將矩形轉換爲原點並返回到中心似乎是開銷。有什麼辦法可以避免這種情況?提前致謝。
PS:我已經看過pygame.transform.rotate
這是做什麼的,但我想從頭開始,以便更好地瞭解圖形。有沒有辦法從python解釋器中看到這種方法的來源?
import pygame, sys, time
from math import *
from pygame.locals import *
co_ordinates =((200,200),(400,200),(400,300),(200,300))
window_surface = pygame.display.set_mode((500,500),0,32)
BLACK=(0,0,0)
GREEN=(0,255,0)
RED=(255,0,0)
window_surface.fill(BLACK)
ang=radians(30)
"""orig=pygame.draw.polygon(window_surface,GREEN,co_ordinates)
n_co_ordinates = tuple([(((x[0])*cos(ang)-(x[1])*sin(ang)),((x[0])*sin(ang)+(x[1])*cos(ang))) for x in n_co_ordinates])
n_co_ordinates = tuple([((x[0]+300),(x[1]+250)) for x in n_co_ordinates])
print(n_co_ordinates)
pygame.draw.polygon(window_surface,RED,n_co_ordinates)"""
pygame.display.update()
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
for i in range(360):
ang=radians(i)
if i>=360:
i=0
n_co_ordinates = tuple([((x[0]-300),(x[1]-250)) for x in co_ordinates])
n_co_ordinates = tuple([((x[0]*cos(ang)-x[1]*sin(ang)),(x[0]*sin(ang)+x[1]*cos(ang))) for x in n_co_ordinates])
n_co_ordinates = tuple([((x[0]+300),(x[1]+250)) for x in n_co_ordinates])
window_surface.fill(BLACK)
pygame.draw.polygon(window_surface,RED,n_co_ordinates)
pygame.display.update()
time.sleep(0.02)
非常感謝。否定角度的作品,但不應該沒有這樣做符合維基?的工作。 – pyguy12 2010-08-16 13:34:05
呵呵。是的,我認爲它應該按照你的方式逆時針旋轉。非常奇怪。 – katrielalex 2010-08-16 14:23:05
嗯..它可能是維基中的錯誤? – pyguy12 2010-08-16 14:46:36