コード例 #1
0
        /// <summary>
        /// R3.Involute : res = a.Involute()
        /// Main involution
        /// </summary>
        public R3 Involute()
        {
            R3 res = new R3();

            res[0] = this[0];
            res[1] = -this[1];
            res[2] = -this[2];
            res[3] = -this[3];
            res[4] = this[4];
            res[5] = this[5];
            res[6] = this[6];
            res[7] = -this[7];
            return(res);
        }
コード例 #2
0
        /// <summary>
        /// R3.subs : res = a - b
        /// multivector/scalar subtraction
        /// </summary>
        public static R3 operator -(R3 a, float b)
        {
            R3 res = new R3();

            res[0] = a[0] - b;
            res[1] = a[1];
            res[2] = a[2];
            res[3] = a[3];
            res[4] = a[4];
            res[5] = a[5];
            res[6] = a[6];
            res[7] = a[7];
            return(res);
        }
コード例 #3
0
        /// <summary>
        /// R3.Dual : res = !a
        /// Poincare duality operator.
        /// </summary>
        public static R3 operator !(R3 a)
        {
            R3 res = new R3();

            res[0] = -a[7];
            res[1] = -a[6];
            res[2] = a[5];
            res[3] = -a[4];
            res[4] = a[3];
            res[5] = -a[2];
            res[6] = a[1];
            res[7] = a[0];
            return(res);
        }
コード例 #4
0
        /// <summary>
        /// R3.ssub : res = a - b
        /// scalar/multivector subtraction
        /// </summary>
        public static R3 operator -(float a, R3 b)
        {
            R3 res = new R3();

            res[0] = a - b[0];
            res[1] = -b[1];
            res[2] = -b[2];
            res[3] = -b[3];
            res[4] = -b[4];
            res[5] = -b[5];
            res[6] = -b[6];
            res[7] = -b[7];
            return(res);
        }
コード例 #5
0
        /// <summary>
        /// R3.muls : res = a * b
        /// multivector/scalar multiplication
        /// </summary>
        public static R3 operator *(R3 a, float b)
        {
            R3 res = new R3();

            res[0] = a[0] * b;
            res[1] = a[1] * b;
            res[2] = a[2] * b;
            res[3] = a[3] * b;
            res[4] = a[4] * b;
            res[5] = a[5] * b;
            res[6] = a[6] * b;
            res[7] = a[7] * b;
            return(res);
        }
コード例 #6
0
        /// <summary>
        /// R3.Sub : res = a - b
        /// Multivector subtraction
        /// </summary>
        public static R3 operator -(R3 a, R3 b)
        {
            R3 res = new R3();

            res[0] = a[0] - b[0];
            res[1] = a[1] - b[1];
            res[2] = a[2] - b[2];
            res[3] = a[3] - b[3];
            res[4] = a[4] - b[4];
            res[5] = a[5] - b[5];
            res[6] = a[6] - b[6];
            res[7] = a[7] - b[7];
            return(res);
        }
コード例 #7
0
        /// <summary>
        /// R3.Dot : res = a | b
        /// The inner product.
        /// </summary>
        public static R3 operator |(R3 a, R3 b)
        {
            R3 res = new R3();

            res[0] = b[0] * a[0] + b[1] * a[1] + b[2] * a[2] + b[3] * a[3] - b[4] * a[4] - b[5] * a[5] - b[6] * a[6] - b[7] * a[7];
            res[1] = b[1] * a[0] + b[0] * a[1] - b[4] * a[2] - b[5] * a[3] + b[2] * a[4] + b[3] * a[5] - b[7] * a[6] - b[6] * a[7];
            res[2] = b[2] * a[0] + b[4] * a[1] + b[0] * a[2] - b[6] * a[3] - b[1] * a[4] + b[7] * a[5] + b[3] * a[6] + b[5] * a[7];
            res[3] = b[3] * a[0] + b[5] * a[1] + b[6] * a[2] + b[0] * a[3] - b[7] * a[4] - b[1] * a[5] - b[2] * a[6] - b[4] * a[7];
            res[4] = b[4] * a[0] + b[7] * a[3] + b[0] * a[4] + b[3] * a[7];
            res[5] = b[5] * a[0] - b[7] * a[2] + b[0] * a[5] - b[2] * a[7];
            res[6] = b[6] * a[0] + b[7] * a[1] + b[0] * a[6] + b[1] * a[7];
            res[7] = b[7] * a[0] + b[0] * a[7];
            return(res);
        }
コード例 #8
0
        /// <summary>
        /// R3.Vee : res = a & b
        /// The regressive product. (JOIN)
        /// </summary>
        public static R3 operator &(R3 a, R3 b)
        {
            R3 res = new R3();

            res[7] = 1 * (a[7] * b[7]);
            res[6] = 1 * (a[6] * b[7] + a[7] * b[6]);
            res[5] = -1 * (a[5] * -1 * b[7] + a[7] * b[5] * -1);
            res[4] = 1 * (a[4] * b[7] + a[7] * b[4]);
            res[3] = 1 * (a[3] * b[7] + a[5] * -1 * b[6] - a[6] * b[5] * -1 + a[7] * b[3]);
            res[2] = -1 * (a[2] * -1 * b[7] + a[4] * b[6] - a[6] * b[4] + a[7] * b[2] * -1);
            res[1] = 1 * (a[1] * b[7] + a[4] * b[5] * -1 - a[5] * -1 * b[4] + a[7] * b[1]);
            res[0] = 1 * (a[0] * b[7] + a[1] * b[6] - a[2] * -1 * b[5] * -1 + a[3] * b[4] + a[4] * b[3] - a[5] * -1 * b[2] * -1 + a[6] * b[1] + a[7] * b[0]);
            return(res);
        }