• Create Account

### #Actualalvaro

Posted 22 September 2012 - 02:11 PM

I will discuss only rotation around the origin. If you need to rotate around some other center, subtract the center first, apply the rotation around the origin and then add the center back.

import math

def rotate(x,y,alpha): # Rotate (x,y) around the origin by an angle alpha (in radians!)
x,y = math.cos(alpha)*x - math.sin(alpha)*y, math.sin(alpha)*x + math.cos(alpha)*y
return (x,y)


I don't use Python, but that seems to work. I am sorry if this code is not idiomatic.

Alternatively, if you are familiar with complex numbers (which in Python are implemented in cmath), you can use them to represent coordinates in 2D (point (x,y) becomes x+y*1j). Instead of thinking of the rotation as an angle alpha, think of it as the complex number z=exp(alpha*1j), which can also be expressed as z=cos(alpha)+sin(alpha)*1j. The rotation is now just multiplication by z.

import cmath

def complex_rotate(z,alpha):
return z * cmath.exp(alpha*1j)

# Example:
# print complex_rotate(complex(2,3),1.57079632679489661922)


(NOTE: "1j" seems to be how one refers to sqrt(-1) in Python)

### #1alvaro

Posted 22 September 2012 - 02:10 PM

I will discuss only rotation around the origin. If you need to rotate around some other center, subtract the center first, apply the rotation around the origin and then add the center back.

import math

def rotate(x,y,alpha): # Rotate (x,y) around the origin by an angle alpha (in radians!)
x,y = math.cos(alpha)*x - math.sin(alpha)*y, math.sin(alpha)*x + math.cos(alpha)*y
return (x,y)


I don't use Python, but that seems to work. I am sorry if this code is not idiomatic.

Alternatively, if you are familiar with complex numbers (which in Python are implemented in cmath), you can use them to represent coordinates in 2D. Instead of thinking of the rotation as an angle alpha, think of it as the complex number z=exp(alpha*1j), which can also be expressed as z=cos(alpha)+sin(alpha)*1j. The rotation is now just multiplication by z.

import cmath

def complex_rotate(z,alpha):
return z * cmath.exp(alpha*1j)

# Example:
# print complex_rotate(complex(2,3),1.57079632679489661922)


(NOTE: "1j" seems to be how one refers to sqrt(-1) in Python)

PARTNERS