Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Rotating a rectangle
#19
Learn pygame Vector2 and Vector3 formulas. They will handle the math.
Example vector3 cube.
import pygame

class Cube:
    def __init__(self, center, color):
        self.color = color
        self.center = pygame.Vector3(center)
        self.points = [
            pygame.Vector3(-1, -1, 1),
            pygame.Vector3(1, -1, 1),
            pygame.Vector3(1, 1, 1),
            pygame.Vector3(-1, 1, 1),
            pygame.Vector3(-1, -1, -1),
            pygame.Vector3(1, -1, -1),
            pygame.Vector3(1, 1, -1),
            pygame.Vector3(-1, 1, -1),
        ]

        self.lines = [(0, 1), (1, 2), (2, 3), (3, 0), # Front
                      (4, 5), (5, 6), (6, 7), (7, 4), # Back
                      (0, 4), (3, 7), # Left
                      (1, 5), (2, 6)  # Right
        ]

        self.scale = 100

    def draw(self, surface):
        for i, j in self.lines:
            a = self.points[i] * self.scale + self.center
            a = pygame.Vector2(a.x, a.y)
            b = self.points[j] * self.scale + self.center
            b = pygame.Vector2(b.x, b.y)
            pygame.draw.line(surface, self.color, a, b)

    def move(self, x, y, z):
        self.center += (x, y, z)

    def rotate(self, angle, x, y, z):
        vector = pygame.Vector3(x, y, z)
        for point in self.points:
            point.rotate_ip(angle, vector)

def main():
    pygame.display.set_caption("Rotating Cube")
    surface = pygame.display.set_mode((800, 600))
    clock = pygame.time.Clock()
    rect = surface.get_rect()
    running = True
    delta = 0
    fps = 60

    center = rect.centerx, rect.centery, 0
    cube = Cube(center, pygame.Color("dodgerblue"))
    velocity = 50

    while running:
        for event in pygame.event.get():
            if event.type == pygame.MOUSEMOTION:
                x, y = event.pos
                cube.center = pygame.Vector3(x, y, 0)
            elif event.type == pygame.QUIT:
                running = False

        surface.fill("black")
        cube.draw(surface)
        cube.rotate(velocity * delta, 1, 1, 1)
        pygame.display.flip()
        delta = clock.tick(fps) * 0.001

if __name__ == "__main__":
    pygame.init()
    main()
    pygame.quit()
99 percent of computer problems exists between chair and keyboard.
Reply


Messages In This Thread
Rotating a rectangle - by CompleteNewb - Aug-23-2021, 09:20 PM
RE: Rotating a rectangle - by deanhystad - Aug-24-2021, 09:54 AM
RE: Rotating a rectangle - by CompleteNewb - Aug-24-2021, 04:15 PM
RE: Rotating a rectangle - by deanhystad - Aug-24-2021, 05:49 PM
RE: Rotating a rectangle - by CompleteNewb - Aug-24-2021, 06:19 PM
RE: Rotating a rectangle - by deanhystad - Aug-24-2021, 08:22 PM
RE: Rotating a rectangle - by BashBedlam - Aug-24-2021, 09:46 PM
RE: Rotating a rectangle - by CompleteNewb - Aug-24-2021, 11:30 PM
RE: Rotating a rectangle - by Windspar - Aug-25-2021, 04:15 AM
RE: Rotating a rectangle - by deanhystad - Aug-25-2021, 03:47 PM
RE: Rotating a rectangle - by CompleteNewb - Aug-25-2021, 03:55 PM
RE: Rotating a rectangle - by deanhystad - Aug-25-2021, 04:34 PM
RE: Rotating a rectangle - by CompleteNewb - Aug-25-2021, 05:27 PM
RE: Rotating a rectangle - by deanhystad - Aug-25-2021, 06:44 PM
RE: Rotating a rectangle - by CompleteNewb - Aug-25-2021, 07:13 PM
RE: Rotating a rectangle - by deanhystad - Aug-25-2021, 07:32 PM
RE: Rotating a rectangle - by deanhystad - Aug-27-2021, 09:39 AM
RE: Rotating a rectangle - by deanhystad - Aug-27-2021, 11:42 AM
RE: Rotating a rectangle - by Windspar - Aug-27-2021, 05:18 PM
RE: Rotating a rectangle - by CompleteNewb - Aug-28-2021, 03:23 PM

Possibly Related Threads…
Thread Author Replies Views Last Post
  [PyGame] Surface and rectangle in pygame Fabrizio_fg 7 6,419 Apr-15-2025, 05:04 PM
Last Post: jassonadder
  Make rectangle snap to other rectangle corners Pedroski55 2 5,385 Aug-13-2021, 09:59 PM
Last Post: Pedroski55
  [PyGame] Rotating image issue Evoluxman 8 8,154 Oct-12-2019, 12:54 PM
Last Post: Evoluxman
  [PyGame] Rectangle keeps teleporting? keyfive 1 4,058 Jun-27-2018, 11:49 PM
Last Post: sonnekrieger7

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020