56 lines
1.3 KiB
Python
56 lines
1.3 KiB
Python
import math
|
|
|
|
from affine import Affine
|
|
|
|
|
|
def test_rotation_angle():
|
|
"""A positive angle rotates a vector counter clockwise
|
|
|
|
(1.0, 0.0):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0---------*
|
|
|
|
Affine.rotation(45.0) * (1.0, 0.0) == (0.707..., 0.707...)
|
|
|
|
|
|
|
| *
|
|
|
|
|
|
|
|
0----------
|
|
"""
|
|
x, y = Affine.rotation(45.0) * (1.0, 0.0)
|
|
assert round(x, 14) == round(math.sqrt(2.0) / 2.0, 14)
|
|
assert round(y, 14) == round(math.sqrt(2.0) / 2.0, 14)
|
|
|
|
|
|
def test_rotation_matrix():
|
|
"""A rotation matrix has expected elements
|
|
|
|
| cos(a) -sin(a) |
|
|
| sin(a) cos(a) |
|
|
|
|
"""
|
|
rot = Affine.rotation(90.0)
|
|
assert round(rot.a, 15) == round(math.cos(math.pi / 2.0), 15)
|
|
assert round(rot.b, 15) == round(-math.sin(math.pi / 2.0), 15)
|
|
assert rot.c == 0.0
|
|
assert round(rot.d, 15) == round(math.sin(math.pi / 2.0), 15)
|
|
assert round(rot.e, 15) == round(math.cos(math.pi / 2.0), 15)
|
|
assert rot.f == 0.0
|
|
|
|
|
|
def test_rotation_matrix_pivot():
|
|
"""A rotation matrix with pivot has expected elements"""
|
|
rot = Affine.rotation(90.0, pivot=(1.0, 1.0))
|
|
exp = (
|
|
Affine.translation(1.0, 1.0)
|
|
* Affine.rotation(90.0)
|
|
* Affine.translation(-1.0, -1.0)
|
|
)
|
|
for r, e in zip(rot, exp):
|
|
assert round(r, 15) == round(e, 15)
|