コード例 #1
0
 public void TransformNormalize(Matrix3 m)
 {
     float[] result = m.VectorMultiply (new float[4] { X, Y, Z, W });
     X = result [0] / result [3];
     Y = result [1] / result [3];
     Z = result [2];
     W = 1;
 }
コード例 #2
0
 // Multiply two matrices together:
 public static Matrix3 operator *(Matrix3 m1, Matrix3 m2)
 {
     Matrix3 result = new Matrix3 ();
     for (int i = 0; i < 4; i++) {
         for (int j = 0; j < 4; j++) {
             float element = 0;
             for (int k = 0; k < 4; k++) {
                 element += m1.M [i, k] * m2.M [k, j];
             }
             result.M [i, j] = element;
         }
     }
     return result;
 }
コード例 #3
0
 // Axonometric projection matrix:
 public static Matrix3 Axonometric(float alpha, float beta)
 {
     Matrix3 result = new Matrix3 ();
     float sna = (float)Math.Sin (alpha * Math.PI / 180);
     float cna = (float)Math.Cos (alpha * Math.PI / 180);
     float snb = (float)Math.Sin (beta * Math.PI / 180);
     float cnb = (float)Math.Cos (beta * Math.PI / 180);
     result.M [0, 0] = cnb;
     result.M [0, 2] = snb;
     result.M [1, 0] = sna * snb;
     result.M [1, 1] = cna;
     result.M [1, 2] = -sna * cnb;
     result.M [2, 2] = 0;
     return result;
 }
コード例 #4
0
        public Point3[,] SphereCoordinates()
        {
            Point3[,] pts = new Point3[30, 20];
            Matrix3 m = new Matrix3 ();
            Matrix3 mt = Matrix3.Translate3 (xc, yc, zc);

            for (int i = 0; i < pts.GetLength(0); i++) {
                for (int j = 0; j < pts.GetLength(1); j++) {
                    pts [i, j] = m.Spherical (r, i * 180 / (pts.GetLength (0) - 1),
                        j * 360 / (pts.GetLength (1) - 1));
                    pts [i, j].Transform (mt);
                }
            }
            return pts;
        }
コード例 #5
0
 public static Matrix3 Euler(float alpha, float beta, float gamma)
 {
     Matrix3 result = new Matrix3 ();
     alpha = alpha * (float)Math.PI / 180.0f;
     float sna = (float)Math.Sin (alpha);
     float cna = (float)Math.Cos (alpha);
     beta = beta * (float)Math.PI / 180.0f;
     float snb = (float)Math.Sin (beta);
     float cnb = (float)Math.Cos (beta);
     gamma = gamma * (float)Math.PI / 180.0f;
     float sng = (float)Math.Sin (gamma);
     float cng = (float)Math.Cos (gamma);
     result.M [0, 0] = cna * cng - sna * snb * sng;
     result.M [0, 1] = -snb * sng;
     result.M [0, 2] = sna * cng - cna * cnb * sng;
     result.M [1, 0] = -sna * snb;
     result.M [1, 1] = cnb;
     result.M [1, 2] = cna * snb;
     result.M [2, 0] = -cna * sng - sna * cnb * cng;
     result.M [2, 1] = -snb * cng;
     result.M [2, 2] = cna * cnb * cng - sna * snb;
     return result;
 }
コード例 #6
0
 // Create a translation matrix
 public static Matrix3 Translate3(float dx, float dy, float dz)
 {
     Matrix3 result = new Matrix3 ();
     result.M [0, 3] = dx;
     result.M [1, 3] = dy;
     result.M [2, 3] = dz;
     return result;
 }
コード例 #7
0
 // Top view projection matrix:
 public static Matrix3 TopView()
 {
     Matrix3 result = new Matrix3 ();
     result.M [1, 1] = 0;
     result.M [2, 2] = 0;
     result.M [1, 2] = -1;
     return result;
 }
コード例 #8
0
 // Side view projection matrix:
 public static Matrix3 SideView()
 {
     Matrix3 result = new Matrix3 ();
     result.M [0, 0] = 0;
     result.M [2, 2] = 0;
     result.M [0, 2] = -1;
     return result;
 }
コード例 #9
0
 // Create a scaling matrix:
 public static Matrix3 Scale3(float sx, float sy, float sz)
 {
     Matrix3 result = new Matrix3 ();
     result.M [0, 0] = sx;
     result.M [1, 1] = sy;
     result.M [2, 2] = sz;
     return result;
 }
コード例 #10
0
 // Create a rotation matrix around the z axis:
 public static Matrix3 Rotate3Z(float theta)
 {
     theta = theta * (float)Math.PI / 180.0f;
     float sn = (float)Math.Sin (theta);
     float cn = (float)Math.Cos (theta);
     Matrix3 result = new Matrix3 ();
     result.M [0, 0] = cn;
     result.M [0, 1] = -sn;
     result.M [1, 0] = sn;
     result.M [1, 1] = cn;
     return result;
 }
コード例 #11
0
 // Perspective projection matrix:
 public static Matrix3 Perspective(float d)
 {
     Matrix3 result = new Matrix3 ();
     result.M [3, 2] = -1 / d;
     return result;
 }
コード例 #12
0
 // Oblique projection matrix:
 public static Matrix3 Oblique(float alpha, float theta)
 {
     Matrix3 result = new Matrix3 ();
     float ta = (float)Math.Tan (alpha * Math.PI / 180);
     float snt = (float)Math.Sin (theta * Math.PI / 180);
     float cnt = (float)Math.Cos (theta * Math.PI / 180);
     result.M [0, 2] = -cnt / ta;
     result.M [1, 2] = -snt / ta;
     result.M [2, 2] = 0;
     return result;
 }
コード例 #13
0
 // Front view projection matrix:
 public static Matrix3 FrontView()
 {
     Matrix3 result = new Matrix3 ();
     result.M [2, 2] = 0;
     return result;
 }