Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #51082

Beginner. 2d rotation gives unexpected results.

Newsgroups comp.lang.python
Date 2013-07-23 05:34 -0700
Message-ID <0a905ff1-199c-4900-81e6-d9b7bb63bb44@googlegroups.com> (permalink)
Subject Beginner. 2d rotation gives unexpected results.
From enmce@yandex.ru

Show all headers | View raw


Hello! 
This is my first post, nice to meet you all!
I`m biology student from Russia, trying to learn python to perform some 

simple simulations.

Here`s my first problem.
I`m trying to perform some simple 2d vector rotations in pygame, in order 

to learn the basics of linear algebra and 2d transformations. So far i 

understand matrix multiplication pretty well, and probably all my math is 

right. Eventually i`m planning to write Poly class, and use it to rotate 

and translate some simple shapes. But when i try and write it in the 

program, i get very weird results, like all points of rectangle with 

coordinates [0,0],[0,100],[100,0],[100,100] start to go spiral and 

eventually shrink to the center. Although even Excel calculations with 

this formulas give me right result.
I use Python 3.3 on Windows Xp. 
What is wrong with my code?

[code]import pygame
import math as m

black = ( 0, 0, 0)
white = ( 255, 255, 255)
green = ( 0, 255, 0)
red = ( 255, 0, 0)

class Poly():
    pos = [100,100] #x and y coordinates of a point
    rot = m.radians(1) #rotation in degrees
    def draw(self): #draw point
        pygame.draw.circle(screen,white,self.pos,10,0)
    def rotate(self): # rotation method
        sin = m.sin(self.rot) #calculationg sin and cos
        cos = m.cos(self.rot)
        x_rot = int(self.pos[0]*cos-self.pos[1]*sin) #mulpitplicating 

vector to rotation matrix
        y_rot = int(self.pos[0]*sin+self.pos[1]*cos)

        self.pos[0] = x_rot #set new coordinates to a point
        self.pos[1] = y_rot

a = Poly() #Some simple sample points giving rectangle
b = Poly()
c = Poly()
d = Poly()

b.pos = [0,100]
c.pos = [100,0]
d.pos = [0,0]

pygame.init()
size = [700,500]
screen = pygame.display.set_mode(size)
done = False
clock = pygame.time.Clock()
while done == False:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True

    a.rotate() #perform rotation
    b.rotate()
    c.rotate()
    d.rotate()

    screen.fill(black)
    
    a.draw() #draw point
    b.draw()
    c.draw()
    d.draw()
    pygame.display.flip()
    clock.tick(30)

pygame.quit()[/code]

P.S. Sorry for my english, bit rusty in that department.

Back to comp.lang.python | Previous | NextNext in thread | Find similar | Unroll thread


Thread

Beginner. 2d rotation gives unexpected results. enmce@yandex.ru - 2013-07-23 05:34 -0700
  Re: Beginner. 2d rotation gives unexpected results. Peter Otten <__peter__@web.de> - 2013-07-23 15:11 +0200
    Re: Beginner. 2d rotation gives unexpected results. Nobody <nobody@nowhere.com> - 2013-07-23 16:20 +0100
  Re: Beginner. 2d rotation gives unexpected results. David Hutto <dwightdhutto@gmail.com> - 2013-07-23 09:04 -0400
  Re: Beginner. 2d rotation gives unexpected results. Joshua Landau <joshua@landau.ws> - 2013-07-24 22:17 +0100
  Re: Beginner. 2d rotation gives unexpected results. Terry Reedy <tjreedy@udel.edu> - 2013-07-24 19:55 -0400

csiph-web