pygame Как плавно двигать круг в произвольном направлении? Например на 110 градусов

У меня есть круг:

pygame.draw.circle(sc, ORANGE, (x, y), r)

На каждой итерации я изменяю его x или y на +1 или -1:

x += 1
y += 1

Таким образом я могу перемещать его примерно так:

\|/
-o-
/|\

Получается я могу переместить свой круг на 45, 90, 135, 180 градусов и тд

Собственно вопрос, а как же мне переместить мой круг например на 110 градусов? Если у меня поверхность состоит из пикселей (квадратов) и я могу перемещаться только, как в примере?

\|/
-o-
/|\

Просто сделать x += 1.5 Я не могу, тк pygame.draw.circle принимает только целые числа.

Эта тема очень сложна для меня и мне было сложно сформировать вопрос, но надеюсь смог объяснить правильно.

Полный код:

import pygame

def main():
    WHITE = (255, 255, 255)
    ORANGE = (255, 150, 100)

    clock = pygame.time.Clock()
    FPS = 60

    WIN_WIDTH = 800
    WIN_HEIGHT = 600

    pygame.init()

    sc = pygame.display.set_mode((WIN_WIDTH, WIN_HEIGHT))

    # радиус и координаты круга
    r = 90
    x = WIN_WIDTH//2
    y = WIN_HEIGHT//2

    while 1:
        sc.fill(WHITE)
        pygame.draw.circle(sc, ORANGE, (x, y), r)
        pygame.display.update()

        for i in pygame.event.get():
            if i.type == pygame.QUIT:
                return

        x += 1
        y -= 1

        # Круг двигается на 135 градусов, а хотелось бы например на 110 градусов

        clock.tick(FPS)

if __name__ == "__main__":
    main()

Ответы (3 шт):

Автор решения: КИТ KIT

Если вы хотите медленно двигать, а принимает только целые числа, то уменьшите FPS. А так, чтобы переместить на определенное расстояние, можно использовать цикл for. К примеру

for i in range(10):
    x += 1
→ Ссылка
Автор решения: S. Nick

да, вам надо манипулировать значениями x и y

введите сюда описание изображения

import pygame

def main():
    WHITE = (255, 255, 255)
    BLACK = (0, 0, 0)
    GRAY = (125, 125, 125)
    LIGHT_BLUE = (64, 128, 255)
    GREEN = (0, 200, 64)
    YELLOW = (225, 225, 0)
    PINK = (230, 50, 230)
    ORANGE = (255, 150, 100)

    clock = pygame.time.Clock()
    FPS = 20                                                     # 60

    WIN_WIDTH = 800
    WIN_HEIGHT = 600

    pygame.init()

    sc = pygame.display.set_mode((WIN_WIDTH, WIN_HEIGHT))

    # радиус и координаты круга
    r = 10                                                       # 90
    x = WIN_WIDTH//2
    y = WIN_HEIGHT//2

    while 1:
        sc.fill(WHITE)
        pygame.draw.circle(sc, ORANGE, (x, y), r)
        pygame.display.update()
        for i in pygame.event.get():
            if i.type == pygame.QUIT:
                return
        x += 1 
        y -= 3                                                  # + 3        # <<<=====<

        # Круг двигается на 135 градусов, а хотелось бы например на 110 градусов
        # 90 + (90 - 45) = 135
        # 90 + (90 - x ) = 110   x = 180 - 110 = 70

        clock.tick(FPS)

if __name__ == "__main__":
    main()

введите сюда описание изображения

→ Ссылка
Автор решения: Danis
def move(x, y, angle, step):
    new_x = x + sin(angle * pi / 180) * step
    new_y = y + cos(angle * pi / 180) * step
    return new_x, new_y

а при отрисовке надо будет приводить числа к целому числу int(x), int(y)

→ Ссылка