Skip to content

Instantly share code, notes, and snippets.

@rightson
Last active December 14, 2015 13:59
Show Gist options
  • Save rightson/5097704 to your computer and use it in GitHub Desktop.
Save rightson/5097704 to your computer and use it in GitHub Desktop.
# -*- coding: utf-8 -*-
class QuaternionNumber:
def __init__(self, r, i, j, k):
self.r = r
self.i = i
self.j = j
self.k = k
def __add__(self, other):
a1, b1, c1, d1 = self.r, self.i, self.j, self.k
a2, b2, c2, d2 = other.r, other.i, other.j, other.k
return (QuaternionNumber(a1 + a2, b1 + b2, c1 + c2, d1 + d2))
def __mul__(self, other):
a1, b1, c1, d1 = self.r, self.i, self.j, self.k
a2, b2, c2, d2 = other.r, other.i, other.j, other.k
return (QuaternionNumber(a1 * a2 - b1 * b2 - c1 * c2 - d1 * d2,
a1 * b2 + b1 * a2 + c1 * d2 - d1 * c2,
a1 * c2 - b1 * d2 + c1 * a2 + d1 * b2,
a1 * d2 + b1 * c2 - c1 * b2 + d1 * a2))
def sign(self, number, suffix):
signed = str(number) + suffix
if number == 0:
return ''
if number > 0:
signed = '+' + signed
return signed
def show(self):
r, i, j, k = self.r, self.i, self.j, self.k
print self.sign(r, '') + self.sign(i, 'i') + self.sign(j, 'j') + self.sign(k, 'k')
if __name__ == "__main__":
a = QuaternionNumber(2, -1, 1, -1)
b = QuaternionNumber(0, 1, 1, -1)
c = QuaternionNumber(1, 1, 2, 2)
a.show()
b.show()
c.show()
(a + b).show()
(b * c).show()
(a * b * c).show()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment