Я новичок в питоне и графике, но программировал раньше. По http://en.wikipedia.org/wiki/Transformation_matrix#Rotation,
для поворота на угол θ
против часовой стрелки о происхождении
функциональной формой является 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)