- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是 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/
我已经很长时间没有使用数学了,这应该是一个简单的问题。 假设我有两个点 A:(1, 0) 和 B:(1, -1)。 我想使用一个程序(Python 或任何编程语言)来计算 A、原点 (0, 0) 和
我有一个用点表示的凸多边形。点由x 坐标数组 和y 坐标数组 表示。 例如: X = {6, 1, 5, 0, 3} Y = {4, 0, 0, 4, 6} 如何按顺时针排序这些点?点数并不总是相同,
我正在开发一个项目,使用这段代码将一个元素拖到另一个圆形元素周围:http://jsfiddle.net/sandeeprajoria/x5APH/11/ function rotateAnn
我有一个二维矩阵 M[N][N],我需要将其逆时针旋转 90 度。我已经看到很多顺时针旋转的答案,但我找不到逆时针旋转的答案。这两个操作有多相似? 最佳答案 如果您反转每一行的顺序,然后顺时针旋转以相
对于我不会涉及的上下文,我需要两个本质上互为倒数的函数。 angle_to() 应该返回钟针从 0° 到连接 p1 和 p2 的线所必须转动的度数>(即 p1 是旋转中心),其中 p1 和 p2 都是
我是一名优秀的程序员,十分优秀!