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); } }
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; }