Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #51082
| 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 |
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 | Next — Next in thread | Find similar | Unroll 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