示例#1
0
        public TCube3D(string file_name)
        {
            String       str;
            StreamReader sr = new StreamReader(file_name);

            str = sr.ReadLine();
            while (str != null)
            {
                if (str.Length >= 1)
                {
                    if (str[0] == 'v')                    //если v то далее будем читать вершину кубика
                    {
                        int x, y, z;


                        x = Int16.Parse(sr.ReadLine());
                        y = Int16.Parse(sr.ReadLine());
                        z = Int16.Parse(sr.ReadLine());
                        TPoint3D point = new TPoint3D(x, y, z);
                        w.Add(point);
                        WN.Add(point);
                    }
                    if (str[0] == 'k')                    //если k то далее будем читать номера вершин по которым нужно нарисовать треугольник
                    {
                        int p1, p2, p3;
                        p1 = Int16.Parse(sr.ReadLine());
                        p2 = Int16.Parse(sr.ReadLine());
                        p3 = Int16.Parse(sr.ReadLine());

                        trian.Add(p1);
                        trian.Add(p2);
                        trian.Add(p3);
                    }
                }
                str = sr.ReadLine();
            }
            //close the file
            sr.Close();

            for (int i = 0; i < w.Count; i++)
            {
                TPoint op = new TPoint();

                op.setx(0);
                op.sety(0);
                v.Add(op);
            }
        }
示例#2
0
        public void view_transformation(double LX, double LY, double LZ, double RRRX, double RRRY, double zoom)
        {
            //каждый кадр мы берём кубик который считали из файла и изменяем его по этим параметрам
            double KX1, KY1, KZ1;
            double KX2, KY2, KZ2;
            double KX3, KY3, KZ3;

            for (int i = 0; i < w.Count; i++)
            {            //берём по очереди все вершины кубика
                // умножаем на матрицу поворота X
                KX1 = w[i].getx();
                KY1 = w[i].gety() * Math.Cos(LX) + w[i].getz() * Math.Sin(LX);
                KZ1 = -w[i].gety() * Math.Sin(LX) + w[i].getz() * Math.Cos(LX);

                // умножаем на матрицу поворота Y
                KX2 = KX1 * Math.Cos(LY) - KZ1 * Math.Sin(LY);
                KY2 = KY1;
                KZ2 = KX1 * Math.Sin(LY) + KZ1 * Math.Cos(LY);

                // умножаем на матрицу поворота Z
                KX3 = KX2 * Math.Cos(LZ) + KY2 * Math.Sin(LZ);
                KY3 = -KX2 *Math.Sin(LZ) + KY2 * Math.Cos(LZ);

                KZ3 = KZ2;

                KX3 += RRRX;                // перемещаем кубик в просранстве
                KY3 += RRRY;

                KX3 *= zoom;                // изменяем размер
                KY3 *= zoom;
                KZ3 *= zoom;

                TPoint3D NN = new TPoint3D(KX3, KY3, KZ3);
                WN[i] = NN;
                v[i].setx(KX3 * (-Math.Sin(0)) + KY3 * (Math.Cos(0)));
                v[i].sety(KX3 * (-Math.Cos(0) * Math.Cos(0)) - KY3 * (Math.Cos(0) * Math.Sin(0)) + KZ3 * (Math.Sin(0)));
            }

            KX1 = 10;             // нам по тем же параметрам нужно переместить точку центра кубика
            KY1 = 10 * Math.Cos(LX) + 10 * Math.Sin(LX);
            KZ1 = -10 * Math.Sin(LX) + 10 * Math.Cos(LX);


            KX2 = KX1 * Math.Cos(LY) - KZ1 * Math.Sin(LY);
            KY2 = KY1;
            KZ2 = KX1 * Math.Sin(LY) + KZ1 * Math.Cos(LY);


            KX3 = KX2 * Math.Cos(LZ) + KY2 * Math.Sin(LZ);
            KY3 = -KX2 *Math.Sin(LZ) + KY2 * Math.Cos(LZ);

            KZ3 = KZ2;

            KX3 += RRRX;            // перемещаем кубик в просранстве
            KY3 += RRRY;

            KX3 *= zoom;            // изменяем размер
            KY3 *= zoom;
            KZ3 *= zoom;

            TPoint3D N = new TPoint3D(KX3, KY3, KZ3);

            pointw = N;
        }