Quaternion type: Difference between revisions

Content added Content deleted
m (J: name change -- mag -> norm)
(→‎{{header|python}}: Extend Q class)
Line 129: Line 129:
def __rmul__(self, other):
def __rmul__(self, other):
return Q.__mul__(self, other)
return Q.__mul__(self, other)

def __truediv__(self, other):
if type(other) == Q:
a1,b1,c1,d1 = self
a2,b2,c2,d2 = other
return self.__mul__(other.reciprocal())
try:
f = float(other)
except:
return NotImplemented
return Q(self.real / f, self.i / f, self.j / f, self.k / f)

def __rtruediv__(self, other):
print(self, other)
return other * self.reciprocal()

__div__, __rdiv__ = __truediv__, __rtruediv__

Quaternion = Q
Quaternion = Q


Line 183: Line 201:
>>> i*j*k
>>> i*j*k
Quaternion(real=-1.0, i=0.0, j=0.0, k=0.0)
Quaternion(real=-1.0, i=0.0, j=0.0, k=0.0)
>>> q1 / q2
Quaternion(real=0.7906976744186047, i=0.023255813953488358, j=-2.7755575615628914e-17, k=0.046511627906976744)
>>> q1 / q2 * q2
Quaternion(real=2.0000000000000004, i=3.0000000000000004, j=4.000000000000001, k=5.000000000000001)
>>> q2 * q1 / q2
Quaternion(real=2.0, i=3.465116279069768, j=3.906976744186047, k=4.767441860465116)
>>> q1.reciprocal() * q1
Quaternion(real=0.9999999999999999, i=0.0, j=0.0, k=0.0)
>>> q1 * q1.reciprocal()
Quaternion(real=0.9999999999999999, i=0.0, j=0.0, k=0.0)
>>> </lang>
>>> </lang>