[英]Python - Pygame: “Co-ordinates of square on sinus”
我的代码有问题,因为我想要4个点(是圆形)来形成正方形的顶点,但是我不知道这些顶点(变量“变化”)之间应该有什么区别。 我将此变量留空,请给我值,我应该在此插入并解释原因?
这是代码:
import pygame
from math import sin, cos
pygame.init()
screen = pygame.display.set_mode((800,600))
BLACK = (0,0,0)
WHITE = (255,255,255)
BLUE = (0,0,255)
GRAY = (175,175,175)
clock = pygame.time.Clock()
Font = pygame.font.SysFont(None, 50)
angle = 0
angle_c = 0
ex = False
a = (0,0)
b = (0,0)
c = (0,0)
d = (0,0)
change =
size = 95
x_c = 400
y_c = 200
while not ex:
for event in pygame.event.get():
if event.type == pygame.QUIT:
ex = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
angle_c = 0.05
if event.key == pygame.K_RIGHT:
angle_c = -0.05
if event.type == pygame.KEYUP:
if event.key == pygame.K_RIGHT or event.key == pygame.K_LEFT:
angle_c = 0
angle += angle_c
a = (round(sin(angle)*size+x_c), round(cos(angle)*size+y_c))
b = (round(sin(angle+change)*size+x_c), round(cos(angle+change)*size+y_c))
c = (round(sin(angle+change*2)*size+x_c), round(cos(angle+change*2)*size+y_c))
d = (round(sin(angle+change*3)*size+x_c), round(cos(angle+change*3)*size+y_c))
screen.fill(WHITE)
pygame.draw.circle(screen, BLUE, (400,200), round(sin(360)*100), 3)
pygame.draw.circle(screen, BLUE, a, 10)
pygame.draw.circle(screen, WHITE, a, 8)
pygame.draw.circle(screen, BLUE, b, 10)
pygame.draw.circle(screen, WHITE, b, 8)
pygame.draw.circle(screen, BLUE, c, 10)
pygame.draw.circle(screen, WHITE, c, 8)
pygame.draw.circle(screen, BLUE, d, 10)
pygame.draw.circle(screen, WHITE, d, 8)
pygame.display.update()
clock.tick(50)
pygame.quit()
从正方形中心到正方形顶点的角度相差90度,即pi / 2
弧度(这是Python的sin
和cos
函数所期望的单位)。
因此,您可以将change
变量设置为pi / 2
(在将pi
添加到要从math
模块导入的名称列表之后),并且您的代码可能会起作用。
但是比起计算坐标要容易得多,因为旋转90度会以可预测的方式改变正弦和余弦值:
sin(a + pi/2)
是cos(a)
cos(a + pi/2)
是-sin(a)
。 重复应用此变换,您可以找出进一步旋转后的正弦和余弦。
您只需要分别调用sin
和cos
一次,然后就可以使用这些值来查找所有坐标。
y = round(sin(angle) * size)
x = round(cos(angle) * size)
a = ( x + x_c, y + y_c)
b = (-y + x_c, x + y_c)
c = (-x + x_c, -y + y_c)
d = ( y + x_c, -x + y_c)
请注意,在上面的代码中,我遵循数学惯例,即角度沿正x
轴从零开始,并随着您最初开始向正y
轴旋转(在pygame的坐标系中为顺时针)而增加。 您以前的代码似乎是从y
轴的正方向测量角度,并沿相反的方向增加角度。 如果这是您真正想要的,则可以简单地在初始分配中反转x
和y
(将余弦分配给y
,将正弦分配给x
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.