Adding codegen tools
This commit is contained in:
56
codegen/matrix.py
Normal file
56
codegen/matrix.py
Normal file
@@ -0,0 +1,56 @@
|
||||
from math import cos, sin, pi
|
||||
|
||||
class Vector:
|
||||
def __init__ (self, x, y):
|
||||
self.x = x
|
||||
self.y = y
|
||||
|
||||
def translate (self, other):
|
||||
if isinstance (other, list):
|
||||
return list(map(lambda v: self.translate(v), other))
|
||||
if isinstance (other, Vector):
|
||||
return Vector(self.x + other.x, self.y + other.y)
|
||||
|
||||
def __str__ (self):
|
||||
return "[ {}; {} ]".format(self.x, self.y)
|
||||
|
||||
def __repr__ (self):
|
||||
return self.__str__()
|
||||
|
||||
class Matrix:
|
||||
|
||||
@classmethod
|
||||
def rotation (cls, theta):
|
||||
return cls(cos(theta), -sin(theta), sin(theta), cos(theta))
|
||||
|
||||
@classmethod
|
||||
def scale (cls, s):
|
||||
return cls(s, 0, 0, s)
|
||||
|
||||
def __init__ (self, a, b, c, d):
|
||||
self.a = a
|
||||
self.b = b
|
||||
self.c = c
|
||||
self.d = d
|
||||
|
||||
def __str__ (self):
|
||||
return "[ {} {}; {} {} ]".format(self.a, self.b, self.c, self.d)
|
||||
|
||||
def __repr__ (self):
|
||||
return self.__str__()
|
||||
|
||||
def multiply (self, other):
|
||||
if isinstance(other, Matrix):
|
||||
return Matrix(self.a * other.a + self.b * other.c,
|
||||
self.a * other.b + self.b * other.d,
|
||||
self.c * other.a + self.d * other.c,
|
||||
self.c * other.b + self.d * other.d)
|
||||
if isinstance (other, float):
|
||||
return Matrix(other * self.a, other * self.b, other * self.c, other * self.d)
|
||||
if isinstance (other, Vector):
|
||||
return Vector(self.a * other.x + self.b * other.y, self.c * other.x + self.d * other.y)
|
||||
if isinstance (other, list):
|
||||
return list(map(lambda v: self.multiply(v), other))
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user