/// <summary> /// MINK.Mul : res = a * b /// The geometric product. /// </summary> public static MINK operator *(MINK a, MINK b) { MINK res = new MINK(); res[0] = b[0] * a[0] + b[1] * a[1] - b[2] * a[2] + b[3] * a[3]; res[1] = b[1] * a[0] + b[0] * a[1] + b[3] * a[2] - b[2] * a[3]; res[2] = b[2] * a[0] + b[3] * a[1] + b[0] * a[2] - b[1] * a[3]; res[3] = b[3] * a[0] + b[2] * a[1] - b[1] * a[2] + b[0] * a[3]; return(res); }
/// <summary> /// MINK.Conjugate : res = a.Conjugate() /// Clifford Conjugation /// </summary> public MINK Conjugate() { MINK res = new MINK(); res[0] = this[0]; res[1] = -this[1]; res[2] = -this[2]; res[3] = -this[3]; return(res); }
/// <summary> /// MINK.Involute : res = a.Involute() /// Main involution /// </summary> public MINK Involute() { MINK res = new MINK(); res[0] = this[0]; res[1] = -this[1]; res[2] = -this[2]; res[3] = this[3]; return(res); }
/// <summary> /// MINK.Dual : res = !a /// Poincare duality operator. /// </summary> public static MINK operator !(MINK a) { MINK res = new MINK(); res[0] = a[3]; res[1] = -a[2]; res[2] = -a[1]; res[3] = a[0]; return(res); }
/// <summary> /// MINK.subs : res = a - b /// multivector/scalar subtraction /// </summary> public static MINK operator -(MINK a, float b) { MINK res = new MINK(); res[0] = a[0] - b; res[1] = a[1]; res[2] = a[2]; res[3] = a[3]; return(res); }
/// <summary> /// MINK.ssub : res = a - b /// scalar/multivector subtraction /// </summary> public static MINK operator -(float a, MINK b) { MINK res = new MINK(); res[0] = a - b[0]; res[1] = -b[1]; res[2] = -b[2]; res[3] = -b[3]; return(res); }
/// <summary> /// MINK.Sub : res = a - b /// Multivector subtraction /// </summary> public static MINK operator -(MINK a, MINK b) { MINK res = new MINK(); res[0] = a[0] - b[0]; res[1] = a[1] - b[1]; res[2] = a[2] - b[2]; res[3] = a[3] - b[3]; return(res); }
/// <summary> /// MINK.Vee : res = a & b /// The regressive product. (JOIN) /// </summary> public static MINK operator &(MINK a, MINK b) { MINK res = new MINK(); res[3] = 1 * (a[3] * b[3]); res[2] = -1 * (a[2] * -1 * b[3] + a[3] * b[2] * -1); res[1] = 1 * (a[1] * b[3] + a[3] * b[1]); res[0] = 1 * (a[0] * b[3] + a[1] * b[2] * -1 - a[2] * -1 * b[1] + a[3] * b[0]); return(res); }