Source code for pymunk.transform
import math
from typing import NamedTuple
[docs]class Transform(NamedTuple):
"""Type used for 2x3 affine transforms.
See wikipedia for details:
http://en.wikipedia.org/wiki/Affine_transformation
The properties map to the matrix in this way:
= = ==
a c tx
b d ty
0 0 1
= = ==
An instance can be created in this way:
>>> Transform(1,2,3,4,5,6)
Transform(a=1, b=2, c=3, d=4, tx=5, ty=6)
Or overriding only some of the values (on a identity matrix):
>>> Transform(b=3,ty=5)
Transform(a=1, b=3, c=0, d=1, tx=0, ty=5)
Or using one of the static methods like identity or translation (see each
method for details).
"""
a: float = 1
b: float = 0
c: float = 0
d: float = 1
tx: float = 0
ty: float = 0
[docs] @staticmethod
def identity() -> "Transform":
"""The identity transform
Example:
>>> Transform.identity()
Transform(a=1, b=0, c=0, d=1, tx=0, ty=0)
Returns a Transform with this matrix:
= = =
1 0 0
0 1 0
0 0 1
= = =
"""
return Transform(1, 0, 0, 1, 0, 0)
[docs] @staticmethod
def translation(x: float, y: float) -> "Transform":
"""A translation transform
Example to translate (move) by 3 on x and 5 in y axis:
>>> Transform.translation(3, 5)
Transform(a=1, b=0, c=0, d=1, tx=3, ty=5)
Returns a Transform with this matrix:
= = =
1 0 x
0 1 y
0 0 1
= = =
"""
return Transform(tx=x, ty=y)
# split into scale and scale_non-uniform
[docs] @staticmethod
def scaling(s: float) -> "Transform":
"""A scaling transform
Example to scale 4x:
>>> Transform.scaling(4)
Transform(a=4, b=0, c=0, d=4, tx=0, ty=0)
Returns a Transform with this matrix:
= = =
s 0 0
0 s 0
0 0 1
= = =
"""
return Transform(a=s, d=s)
[docs] @staticmethod
def rotation(t: float) -> "Transform":
"""A rotation transform
Example to rotate by 1 rad:
>>> Transform.rotation(1)
Transform(a=0.5403023058681398, b=0.8414709848078965, c=-0.8414709848078965, d=0.5403023058681398, tx=0, ty=0)
Returns a Transform with this matrix:
====== ======= =
cos(t) -sin(t) 0
sin(t) cos(t) 0
0 0 1
====== ======= =
"""
c = math.cos(t)
s = math.sin(t)
return Transform(a=c, b=s, c=-s, d=c)