예제 #1
0
파일: LoTVLogics.cs 프로젝트: Mexahoid/CSF
 LoTVPoint Rotate(LoTVPoint P)
 {
     LoTVPoint Result = new LoTVPoint((P.X - fxc) * Math.Cos(Alf) - (P.Y - fyc) * Math.Sin(Alf),
     ((P.X - fxc) * Math.Sin(Alf) + (P.Y - fyc) * Math.Cos(Alf)) * Math.Cos(Bet) - (P.Z - fzc) * Math.Sin(Bet),
     ((P.X - fxc) * Math.Sin(Alf) + (P.Y - fyc) * Math.Cos(Alf)) * Math.Sin(Bet) + (P.Z - fzc) * Math.Cos(Bet));
       return Result;
 }
예제 #2
0
파일: LoTVLogics.cs 프로젝트: Mexahoid/CSF
 public void Parse(string Input)
 {
     double AllX = 0, AllY = 0, AllZ = 0;
       double X, Y, Z;
       string[] Arr = Input.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
       int Length = Arr.Length;
       string[] Row;
       for (int i = 0; i < Length; i++)
       {
     if (Arr[i] != "" && Arr[i][0] != '#')
       switch (Arr[i].Substring(0, 2))
       {
     case "v ":
       Row = Arr[i].Split(null as string[], StringSplitOptions.RemoveEmptyEntries);
       Array.Resize(ref Points, ++PLength);
       X = double.Parse(Row[1], System.Globalization.CultureInfo.InvariantCulture);
       Y = double.Parse(Row[2], System.Globalization.CultureInfo.InvariantCulture);
       Z = double.Parse(Row[3], System.Globalization.CultureInfo.InvariantCulture);
       AllX += X;
       AllY += Y;
       AllZ += Z;
       Points[PLength - 1] = new LoTVPoint(X, Y, Z);
       break;
     case "f ":
       Row = Arr[i].Split(' ');
       string[] Temp;
       int[] F = new int[3];
       for (int k = 1; k <= 3; k++)
       {
         Temp = Row[k].Split('/');
         F[k - 1] = int.Parse(Temp[0]);
       }
       Array.Resize(ref Polygons, ++RLength);
       Polygons[RLength - 1] = new LoTVPolygon(F[0], F[1], F[2]);
       Array.Resize(ref Edges, ELength + 3);
       ELength += 3;
       Edges[ELength - 3] = new LoTVEdge(F[0], F[1]);
       Edges[ELength - 2] = new LoTVEdge(F[1], F[2]);
       Edges[ELength - 1] = new LoTVEdge(F[2], F[0]);
       break;
       }
       }
       Center = new LoTVPoint(AllX / PLength, AllY / PLength, AllZ / PLength);
 }
예제 #3
0
파일: LoTVLogics.cs 프로젝트: Mexahoid/CSF
 private Point IJ(LoTVPoint P)
 {
     double Xn = (P.X - fxc) * Math.Cos(Alf) - (P.Y - fyc) * Math.Sin(Alf);
       double Yn = ((P.X - fxc) * Math.Sin(Alf) + (P.Y - fyc) * Math.Cos(Alf)) * Math.Cos(Bet) - (P.Z - fzc) * Math.Sin(Bet);
       double Zn = ((P.X - fxc) * Math.Sin(Alf) + (P.Y - fyc) * Math.Cos(Alf)) * Math.Sin(Bet) + (P.Z - fzc) * Math.Cos(Bet);
       //Xn = Xn / (Zn * FA + 1);
       //Yn = Yn / (Zn * FA + 1);
       int X = (int)Math.Round(I2 * (Xn - Xmin) / (Xmax - Xmin));
       int Y = (int)Convert.ToInt32(J2 * (Yn - Ymax) / (Ymin - Ymax));
       return new Point(X, Y);
 }
예제 #4
0
파일: LoTVLogics.cs 프로젝트: Mexahoid/CSF
 public void GeLoTVPoint(LoTVPoint Input, out double Outx, out double Outy)
 {
     double cos = Math.Cos(Alf);
       double sin = Math.Sin(Alf);
       double x = Input.X;
       double y = Input.Y;
       double z = Input.Z;
       x = (x - x0) * cos - (y - y0) * sin;
       y = ((x - x0) * sin + (y - y0) * cos) * cos - (z - z0) * sin;
       z = ((x - x0) * sin + (y - y0) * cos) * sin + (z - z0) * cos;
       Outx = x / ((z / 0.5) + 1);
       Outy = y / ((z / 0.5) + 1);
 }