altos: Add some comments describing quaternion multiplication
authorKeith Packard <keithp@keithp.com>
Mon, 28 Oct 2013 06:11:09 +0000 (23:11 -0700)
committerKeith Packard <keithp@keithp.com>
Mon, 28 Oct 2013 06:11:09 +0000 (23:11 -0700)
Signed-off-by: Keith Packard <keithp@keithp.com>
src/core/ao_quaternion.h

index 1c0617c43bcfd56aae683054e776eac181819731..6a701a1877aca163decc06ccd58578b5f8952873 100644 (file)
@@ -31,6 +31,39 @@ static inline void ao_quaternion_multiply(struct ao_quaternion *r,
 {
        struct ao_quaternion    t;
 #define T(_a,_b)       (((a)->_a) * ((b)->_b))
+
+/*
+ * Quaternions
+ *
+ *     ii = jj = kk = ijk = -1;
+ *
+ *     kji = 1;
+ *
+ *     ij = k;         ji = -k;
+ *     kj = -i;        jk = i;
+ *     ik = -j;        ki = j;
+ *
+ * Multiplication p * q:
+ *
+ *     (pr + ipx + jpy + kpz) (qr + iqx + jqy + kqz) =
+ *
+ *             ( pr * qr +  pr * iqx +  pr * jqy +  pr * kqz) +
+ *             (ipx * qr + ipx * iqx + ipx * jqy + ipx * kqz) +
+ *             (jpy * qr + jpy * iqx + jpy * jqy + jpy * kqz) +
+ *             (kpz * qr + kpz * iqx + kpz * jqy + kpz * kqz) =
+ *
+ *
+ *              (pr * qr) + i(pr * qx) + j(pr * qy) + k(pr * qz) +
+ *             i(px * qr) -  (px * qx) + k(px * qy) - j(px * qz) +
+ *             j(py * qr) - k(py * qx) -  (py * qy) + i(py * qz) +
+ *             k(pz * qr) + j(pz * qx) - i(pz * qy) -  (pz * qz) =
+ *
+ *             1 * ( (pr * qr) - (px * qx) - (py * qy) - (pz * qz) ) +
+ *             i * ( (pr * qx) + (px * qr) + (py * qz) - (pz * qy) ) +
+ *             j * ( (pr * qy) - (px * qz) + (py * qr) + (pz * qx) ) +
+ *             k * ( (pr * qz) + (px * qy) - (py * qx) + (pz * qr);
+ */
+
        t.r = T(r,r) - T(x,x) - T(y,y) - T(z,z);
        t.x = T(r,x) + T(x,r) + T(y,z) - T(z,y);
        t.y = T(r,y) - T(x,z) + T(y,r) + T(z,x);