Last Updated or created 2024-04-09
My friend Tyrone posted something he recorded from TV.
It was an illusion, using rotated images.
The effect is that it seems that the card is rotating at different speeds, when pressing the s (show/unshow) key, you see the card rotating at the same speed as before.
So I wanted to try to recreate this using python.
The effect is there, but a little less.
What can I improve?
Mine:
Original:
import pygame import math # 20240409 added s to toggle pygame.init() screen = pygame.display.set_mode((1600, 900)) clock = pygame.time.Clock() def blitRotate(surf, image, pos, originPos, angle): image_rect = image.get_rect(topleft = (pos[0] - originPos[0], pos[1]-originPos[1])) offset_center_to_pivot = pygame.math.Vector2(pos) - image_rect.center rotated_offset = offset_center_to_pivot.rotate(-angle) rotated_image_center = (pos[0] - rotated_offset.x, pos[1] - rotated_offset.y) rotated_image = pygame.transform.rotate(image, angle) rotated_image_rect = rotated_image.get_rect(center = rotated_image_center) surf.blit(rotated_image, rotated_image_rect) try: image = pygame.image.load('cards.png').convert_alpha() image2 = pygame.image.load('clear+sea+water-2048x2048.png').convert_alpha() except: text = pygame.font.SysFont('Times New Roman', 50).render('imagemissing', False, (255, 255, 0)) image = pygame.Surface((text.get_width()+1, text.get_height()+1)) image2 = image image.blit(text, (1, 1)) w, h = image.get_size() angle = 0 angle2 = 0 done = False while not done: clock.tick(60) for event in pygame.event.get(): if event.type == pygame.QUIT: done = True pos = (screen.get_width()/2, screen.get_height()/2) screen.fill(0) keys = pygame.key.get_pressed() if (not keys[pygame.K_s]): blitRotate(screen, image2, pos, (900, 900), angle2) blitRotate(screen, image, pos, (w/2, h/2), angle) angle += 1 angle2 += math.sin(math.radians(angle)) pygame.display.flip() pygame.quit() exit()