示例#1
0
        private void button4_Click(object sender, EventArgs e)
        {
            shape.Clear();
            int    count = (int)countRotation.Value;
            double angle = (360 / count * Math.PI) / 180;
            Matrix m     = rotationYMatrix(angle);

            for (int c = 0; c < count; c++)
            {
                List <my_point> nextPoints = new List <my_point>();
                for (int i = 0; i < points.Count; i++)
                {
                    my_point p = new my_point();
                    p.updateFromVector(m.Multiple(points[i].getVector()));
                    nextPoints.Add(p);
                }
                for (int i = 1; i < points.Count; i++)
                {
                    face f = new face();
                    f.add(points[i - 1]);
                    f.add(points[i]);
                    f.add(nextPoints[i]);
                    f.add(nextPoints[i - 1]);
                    shape.Add(f);
                }
                points = nextPoints;
            }
            points.Clear();
            redraw_image();
        }
示例#2
0
        private void build_tetrahedron()
        {
            double h = Math.Sqrt(3) / 2 * 100;

            my_point p1 = new my_point(-50, -h / 2, 0);
            my_point p2 = new my_point(0, -h / 2, -h);
            my_point p3 = new my_point(50, -h / 2, 0);
            my_point p4 = new my_point(0, h / 2, 0);

            face f1 = new face();   f1.add(p1);             f1.add(p2);             f1.add(p3);             shape.Add(f1);
            face f2 = new face();   f2.add(p1);             f2.add(p4);             f2.add(p2);             shape.Add(f2);
            face f3 = new face();   f3.add(p4);             f3.add(p2);             f3.add(p3);             shape.Add(f3);
            face f4 = new face();   f4.add(p1);             f4.add(p4);             f4.add(p3);             shape.Add(f4);
        }
示例#3
0
        private void build_hexahedron()
        {
            my_point p1 = new my_point(-50, -50, -50);
            my_point p2 = new my_point(-50, 50, -50);
            my_point p3 = new my_point(50, 50, -50);
            my_point p4 = new my_point(50, -50, -50);
            my_point p5 = new my_point(-50, -50, 50);
            my_point p6 = new my_point(-50, 50, 50);
            my_point p7 = new my_point(50, 50, 50);
            my_point p8 = new my_point(50, -50, 50);

            face f1 = new face();       f1.add(p1);             f1.add(p2);             f1.add(p3);             f1.add(p4);             shape.Add(f1);
            face f2 = new face();   f2.add(p1);             f2.add(p2);             f2.add(p6);             f2.add(p5);             shape.Add(f2);
            face f3 = new face();   f3.add(p5);             f3.add(p6);             f3.add(p7);             f3.add(p8);             shape.Add(f3);
            face f4 = new face();   f4.add(p4);             f4.add(p3);             f4.add(p7);             f4.add(p8);             shape.Add(f4);
            face f5 = new face();   f5.add(p2);             f5.add(p6);             f5.add(p7);             f5.add(p3);             shape.Add(f5);
            face f6 = new face();   f6.add(p1);             f6.add(p5);             f6.add(p8);             f6.add(p4);             shape.Add(f6);
        }
示例#4
0
        private void build_cube()
        {
            double   h  = 50;
            my_point p1 = new my_point(0, 0, 0);
            my_point p2 = new my_point(h, 0, 0);
            my_point p3 = new my_point(h, 0, h);
            my_point p4 = new my_point(0, 0, h);
            my_point p5 = new my_point(0, h, 0);
            my_point p6 = new my_point(h, h, 0);
            my_point p7 = new my_point(h, h, h);
            my_point p8 = new my_point(0, h, h);

            face f1 = new face();   f1.add(p1); f1.add(p2); f1.add(p3); f1.add(p4); shape.Add(f1);
            face f2 = new face(); f2.add(p5); f2.add(p6); f2.add(p7); f2.add(p8); shape.Add(f2);
            face f3 = new face(); f3.add(p1); f3.add(p2); f3.add(p6); f3.add(p5); shape.Add(f3);
            face f4 = new face(); f4.add(p2); f4.add(p6); f4.add(p7); f4.add(p3); shape.Add(f4);
            face f5 = new face(); f5.add(p7); f5.add(p3); f5.add(p4); f5.add(p8); shape.Add(f5);
            face f6 = new face(); f6.add(p4); f6.add(p8); f6.add(p5); f6.add(p1); shape.Add(f6);
        }
示例#5
0
        private void draw_face(face f) // рисуем грань
        {
            int n = f.points.Count - 1;

            int x1 = (int)Math.Round(f.points[0].X + centerX);
            int x2 = (int)Math.Round(f.points[n].X + centerX);
            int y1 = (int)Math.Round(-f.points[0].Y + centerY);
            int y2 = (int)Math.Round(-f.points[n].Y + centerY);

            g.DrawLine(pen_shape, x1, y1, x2, y2);

            for (int i = 0; i < n; i++)
            {
                x1 = (int)Math.Round(f.points[i].X + centerX);
                x2 = (int)Math.Round(f.points[i + 1].X + centerX);
                y1 = (int)Math.Round(-f.points[i].Y + centerY);
                y2 = (int)Math.Round(-f.points[i + 1].Y + centerY);
                g.DrawLine(pen_shape, x1, y1, x2, y2);
            }
        }
示例#6
0
        private void build_octahedron()
        {
            double a = Math.Sqrt(3) / 2 * 100;
            double p = (a + a + 100) / 2;
            double h = 2 * Math.Sqrt(p * (p - 100) * (p - a) * (p - a)) / 100;

            my_point p1 = new my_point(0, -h, 0);
            my_point p2 = new my_point(-50, 0, -50);
            my_point p3 = new my_point(0, h, 0);
            my_point p4 = new my_point(50, 0, -50);
            my_point p5 = new my_point(-50, 0, 50);
            my_point p6 = new my_point(50, 0, 50);

            face f1 = new face();       f1.add(p2);             f1.add(p3);             f1.add(p4);             shape.Add(f1);
            face f2 = new face();   f2.add(p2);             f2.add(p1);             f2.add(p4);             shape.Add(f2);
            face f3 = new face();   f3.add(p2);             f3.add(p3);             f3.add(p5);             shape.Add(f3);
            face f4 = new face();   f4.add(p2);             f4.add(p1);             f4.add(p5);             shape.Add(f4);
            face f5 = new face();   f5.add(p4);             f5.add(p3);             f5.add(p6);             shape.Add(f5);
            face f6 = new face();   f6.add(p4);             f6.add(p1);             f6.add(p6);             shape.Add(f6);
            face f7 = new face();   f7.add(p5);             f7.add(p3);             f7.add(p6);             shape.Add(f7);
            face f8 = new face();   f8.add(p5);             f8.add(p1);             f8.add(p6);             shape.Add(f8);
        }
示例#7
0
 //Открыть из файла
 private void button1_Click(object sender, EventArgs e)
 {
     if (openFileDialog1.ShowDialog() == DialogResult.OK)
     {
         shape.Clear();
         var    read = new System.IO.StreamReader(openFileDialog1.FileName);
         string text;
         int    n = Int32.Parse(read.ReadLine());
         shape = new List <face>();
         for (int i = 0; i < n; i++)
         {
             text = read.ReadLine();
             string[] coords = text.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
             face     f      = new face();
             for (int j = 0; j < coords.Count(); j += 3)
             {
                 f.add(new my_point(double.Parse(coords[j]), double.Parse(coords[j + 1]), double.Parse(coords[j + 2])));
             }
             shape.Add(f);
         }
         read.Dispose();
         redraw_image();
     }
 }