Esempio n. 1
0
        public static c_matrix rotate(e_axis axis, e_angle angle)
        {
            c_matrix result = identity();

            switch (axis)
            {
            case e_axis.x:
                result.values[1, 1] = cosine(angle);
                result.values[1, 2] = -sine(angle);
                result.values[2, 1] = sine(angle);
                result.values[2, 2] = cosine(angle);
                break;

            case e_axis.y:
                result.values[0, 0] = cosine(angle);
                result.values[0, 2] = sine(angle);
                result.values[2, 0] = -sine(angle);
                result.values[2, 2] = cosine(angle);
                break;

            case e_axis.z:
                result.values[0, 0] = cosine(angle);
                result.values[0, 1] = -sine(angle);
                result.values[1, 0] = sine(angle);
                result.values[1, 1] = cosine(angle);
                break;

            default: throw new Exception("invalid axis");
            }

            return(result);
        }
Esempio n. 2
0
        public static c_matrix scale(c_vector s)
        {
            c_matrix result = identity();

            result.values[0, 0] *= s.x;
            result.values[1, 1] *= s.y;
            result.values[2, 2] *= s.z;

            return(result);
        }
Esempio n. 3
0
        public static c_matrix invert_translation(c_matrix m)
        {
            c_matrix result = new c_matrix(m);

            result.values[0, 3] = -m.values[0, 3];
            result.values[1, 3] = -m.values[1, 3];
            result.values[2, 3] = -m.values[2, 3];

            return(result);
        }
Esempio n. 4
0
        public static c_matrix translate(c_vector t)
        {
            c_matrix result = identity();

            result.values[0, 3] += t.x;
            result.values[1, 3] += t.y;
            result.values[2, 3] += t.z;

            return(result);
        }
Esempio n. 5
0
 public c_matrix(c_matrix other)
 {
     for (int row = 0; row < 4; row++)
     {
         for (int col = 0; col < 4; col++)
         {
             values[row, col] = other.values[row, col];
         }
     }
 }
Esempio n. 6
0
        public static c_matrix identity()
        {
            c_matrix result = new c_matrix();

            result.values[0, 0] = 1;
            result.values[1, 1] = 1;
            result.values[2, 2] = 1;
            result.values[3, 3] = 1;

            return(result);
        }
Esempio n. 7
0
            // create a new scanner that is equivalent to this, but with operation applied to all the objects.
            private c_scanner apply(c_matrix operation)
            {
                c_vector result_scanner = operation.multiply(scanner);

                c_vector[] result_beacons = new c_vector[beacons.Length];

                for (int i = 0; i < beacons.Length; i++)
                {
                    result_beacons[i] = operation.multiply(beacons[i]);
                }

                return(new c_scanner(result_scanner, result_beacons));
            }
Esempio n. 8
0
        public c_matrix multiply(c_matrix other)
        {
            // result is performing other first, then this.

            c_matrix result = new c_matrix();

            for (int row = 0; row < 4; row++)
            {
                for (int col = 0; col < 4; col++)
                {
                    int value = 0;

                    for (int i = 0; i < 4; i++)
                    {
                        value += this.values[row, i] * other.values[i, col];
                    }

                    result.values[row, col] = value;
                }
            }

            return(result);
        }