summaryrefslogtreecommitdiff
path: root/host/inter/trans_matrix.py
diff options
context:
space:
mode:
authorNicolas Schodet2009-02-09 20:05:30 +0100
committerNicolas Schodet2009-02-09 20:05:30 +0100
commit2e95e3a33bcb34aeec66551503c692c1cb80ab61 (patch)
tree6b763ee0d1bf458da0ced13f44535b42f3b8efb8 /host/inter/trans_matrix.py
parent552b28da98a387d13aea7403a7e72732a913277d (diff)
* all python:
- changed tabs to spaces.
Diffstat (limited to 'host/inter/trans_matrix.py')
-rw-r--r--host/inter/trans_matrix.py226
1 files changed, 113 insertions, 113 deletions
diff --git a/host/inter/trans_matrix.py b/host/inter/trans_matrix.py
index dcaab134..a8f3849a 100644
--- a/host/inter/trans_matrix.py
+++ b/host/inter/trans_matrix.py
@@ -33,138 +33,138 @@ class TransMatrix:
IDENTITY = ((1, 0), (0, 1), (0, 0))
def __init__ (self, *m):
- """Initialise the matrix, with optional initial value.
-
- >>> TransMatrix ()
- ((1, 0), (0, 1), (0, 0))
- >>> TransMatrix ((1, 2), (3, 4), (5, 6))
- ((1, 2), (3, 4), (5, 6))
- """
- if m:
- assert len (m) == 3
- for i in m:
- assert len (i) == 2
- self.matrix = m
- else:
- self.matrix = self.IDENTITY
+ """Initialise the matrix, with optional initial value.
+
+ >>> TransMatrix ()
+ ((1, 0), (0, 1), (0, 0))
+ >>> TransMatrix ((1, 2), (3, 4), (5, 6))
+ ((1, 2), (3, 4), (5, 6))
+ """
+ if m:
+ assert len (m) == 3
+ for i in m:
+ assert len (i) == 2
+ self.matrix = m
+ else:
+ self.matrix = self.IDENTITY
def identity (self):
- """Set to identity.
+ """Set to identity.
- >>> a = TransMatrix ()
- >>> a.translate ((2, 3))
- >>> a.identity (); a
- ((1, 0), (0, 1), (0, 0))
- """
- self.matrix = self.IDENTITY
+ >>> a = TransMatrix ()
+ >>> a.translate ((2, 3))
+ >>> a.identity (); a
+ ((1, 0), (0, 1), (0, 0))
+ """
+ self.matrix = self.IDENTITY
def rotate (self, angle):
- """Transform the current matrix to do a rotation.
-
- >>> from math import pi
- >>> a = TransMatrix ()
- >>> a.rotate (pi / 3); a # doctest: +ELLIPSIS
- ((0.5..., 0.866...), (-0.866..., 0.5...), (0.0, 0.0))
- """
- s = sin (angle)
- c = cos (angle)
- m = TransMatrix ((c, s), (-s, c), (0, 0))
- self *= m
+ """Transform the current matrix to do a rotation.
+
+ >>> from math import pi
+ >>> a = TransMatrix ()
+ >>> a.rotate (pi / 3); a # doctest: +ELLIPSIS
+ ((0.5..., 0.866...), (-0.866..., 0.5...), (0.0, 0.0))
+ """
+ s = sin (angle)
+ c = cos (angle)
+ m = TransMatrix ((c, s), (-s, c), (0, 0))
+ self *= m
def translate (self, by):
- """Transform the current matrix to do a translation.
-
- >>> a = TransMatrix ()
- >>> a.translate ((2, 3)); a
- ((1, 0), (0, 1), (2, 3))
- """
- m = TransMatrix ((1, 0), (0, 1), by)
- self *= m
+ """Transform the current matrix to do a translation.
+
+ >>> a = TransMatrix ()
+ >>> a.translate ((2, 3)); a
+ ((1, 0), (0, 1), (2, 3))
+ """
+ m = TransMatrix ((1, 0), (0, 1), by)
+ self *= m
def scale (self, factor):
- """Transform the current matrix to do a scaling.
-
- >>> a = TransMatrix ()
- >>> a.scale (2); a
- ((2, 0), (0, 2), (0, 0))
- """
- m = TransMatrix ((factor, 0), (0, factor), (0, 0))
- self *= m
+ """Transform the current matrix to do a scaling.
+
+ >>> a = TransMatrix ()
+ >>> a.scale (2); a
+ ((2, 0), (0, 2), (0, 0))
+ """
+ m = TransMatrix ((factor, 0), (0, factor), (0, 0))
+ self *= m
def __imul__ (self, other):
- """Multiply by an other matrix.
-
- >>> a = TransMatrix ((1, 0), (0, 1), (1, 0))
- >>> b = TransMatrix ((0, 1), (1, 0), (0, 1))
- >>> a *= b; a
- ((0, 1), (1, 0), (0, 2))
- """
- s = self.matrix
- o = other.matrix
- self.matrix = (
- (s[0][0] * o[0][0] + s[0][1] * o[1][0],
- s[0][0] * o[0][1] + s[0][1] * o[1][1]),
- (s[1][0] * o[0][0] + s[1][1] * o[1][0],
- s[1][0] * o[0][1] + s[1][1] * o[1][1]),
- (s[2][0] * o[0][0] + s[2][1] * o[1][0] + o[2][0],
- s[2][0] * o[0][1] + s[2][1] * o[1][1] + o[2][1]))
- return self
+ """Multiply by an other matrix.
+
+ >>> a = TransMatrix ((1, 0), (0, 1), (1, 0))
+ >>> b = TransMatrix ((0, 1), (1, 0), (0, 1))
+ >>> a *= b; a
+ ((0, 1), (1, 0), (0, 2))
+ """
+ s = self.matrix
+ o = other.matrix
+ self.matrix = (
+ (s[0][0] * o[0][0] + s[0][1] * o[1][0],
+ s[0][0] * o[0][1] + s[0][1] * o[1][1]),
+ (s[1][0] * o[0][0] + s[1][1] * o[1][0],
+ s[1][0] * o[0][1] + s[1][1] * o[1][1]),
+ (s[2][0] * o[0][0] + s[2][1] * o[1][0] + o[2][0],
+ s[2][0] * o[0][1] + s[2][1] * o[1][1] + o[2][1]))
+ return self
def apply (self, *args):
- """Apply (multiply) the matrix to all the given arguments.
-
- >>> m = TransMatrix ((1, 2), (4, 8), (16, 32))
- >>> m.apply ((1, 0))
- (17, 34)
- >>> m.apply ((0, 1), (1, 1))
- ((20, 40), (21, 42))
- """
- r = tuple (
- (i[0] * self.matrix[0][0] + i[1] * self.matrix[1][0]
- + self.matrix[2][0],
- i[0] * self.matrix[0][1] + i[1] * self.matrix[1][1]
- + self.matrix[2][1])
- for i in args)
- if len (args) == 1:
- return r[0]
- else:
- return r
+ """Apply (multiply) the matrix to all the given arguments.
+
+ >>> m = TransMatrix ((1, 2), (4, 8), (16, 32))
+ >>> m.apply ((1, 0))
+ (17, 34)
+ >>> m.apply ((0, 1), (1, 1))
+ ((20, 40), (21, 42))
+ """
+ r = tuple (
+ (i[0] * self.matrix[0][0] + i[1] * self.matrix[1][0]
+ + self.matrix[2][0],
+ i[0] * self.matrix[0][1] + i[1] * self.matrix[1][1]
+ + self.matrix[2][1])
+ for i in args)
+ if len (args) == 1:
+ return r[0]
+ else:
+ return r
def apply_angle (self, angle):
- """Apply the matrix to an angle.
-
- >>> from math import pi
- >>> a = TransMatrix ()
- >>> a.rotate (pi / 6)
- >>> a.translate ((2, 3))
- >>> a.scale (4)
- >>> a.apply_angle (pi / 6), pi / 3 # doctest: +ELLIPSIS
- (1.0471..., 1.0471...)
- """
- o, m = self.apply ((0, 0), (cos (angle), sin (angle)))
- v = (m[0] - o[0], m[1] - o[1])
- vl = sqrt (v[0] ** 2 + v[1] ** 2)
- v = (v[0] / vl, v[1] / vl)
- return atan2 (v[1], v[0])
+ """Apply the matrix to an angle.
+
+ >>> from math import pi
+ >>> a = TransMatrix ()
+ >>> a.rotate (pi / 6)
+ >>> a.translate ((2, 3))
+ >>> a.scale (4)
+ >>> a.apply_angle (pi / 6), pi / 3 # doctest: +ELLIPSIS
+ (1.0471..., 1.0471...)
+ """
+ o, m = self.apply ((0, 0), (cos (angle), sin (angle)))
+ v = (m[0] - o[0], m[1] - o[1])
+ vl = sqrt (v[0] ** 2 + v[1] ** 2)
+ v = (v[0] / vl, v[1] / vl)
+ return atan2 (v[1], v[0])
def apply_distance (self, distance):
- """Apply the matrix to a distance.
-
- >>> from math import pi
- >>> a = TransMatrix ()
- >>> a.rotate (pi / 6)
- >>> a.translate ((2, 3))
- >>> a.scale (4)
- >>> round (a.apply_distance (2))
- 8.0
- """
- o, m = self.apply ((0, 0), (distance, 0))
- v = (m[0] - o[0], m[1] - o[1])
- vl = sqrt (v[0] ** 2 + v[1] ** 2)
- return vl
+ """Apply the matrix to a distance.
+
+ >>> from math import pi
+ >>> a = TransMatrix ()
+ >>> a.rotate (pi / 6)
+ >>> a.translate ((2, 3))
+ >>> a.scale (4)
+ >>> round (a.apply_distance (2))
+ 8.0
+ """
+ o, m = self.apply ((0, 0), (distance, 0))
+ v = (m[0] - o[0], m[1] - o[1])
+ vl = sqrt (v[0] ** 2 + v[1] ** 2)
+ return vl
def __repr__ (self):
- return self.matrix.__repr__ ()
+ return self.matrix.__repr__ ()
def _test ():
import doctest