gpt4 book ai didi

python - 二维形状顺时针方向旋转

转载 作者:太空宇宙 更新时间:2023-11-04 11:03:14 25 4
gpt4 key购买 nike

我是 python 和图形的新手,但之前编程过。根据http://en.wikipedia.org/wiki/Transformation_matrix#Rotation ,

For rotation by an angle θ anticlockwise about the origin, the functional form is x' = xcosθ − ysinθ and 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)

最佳答案

Pygame 使用坐标系,其中 [0,0] 是左上角。您的旋转在点越高,y 坐标越高的坐标系中可以正常工作,但 pygame 恰恰相反:点越低,y 坐标越高。这使得一切都“翻转”,因此您的对象看起来旋转的角度将与您旋转它的角度相反。解决此问题的最简单方法可能是只输入与您要旋转的角度相反的角度。

关于python - 二维形状顺时针方向旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3493357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com