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> |
||