Beispiel #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();
        }
Beispiel #2
0
 private void axis_choice_button_Click(object sender, EventArgs e) // выбираем точки для поворота вокруг оси
 {
     if (axis_P1 != null)
     {
         axis_P1 = axis_P2 = null;
         redraw_image();
     }
     is_axis = true;
 }
Beispiel #3
0
 //Указать образующие
 private void pictureBox_MouseClick(object sender, MouseEventArgs e)
 {
     if (SetPoints.Checked)
     {
         my_point p = new my_point(e.X - centerX, centerY - e.Y, 0);
         points.Add(p);
     }
     redraw_image();
 }
Beispiel #4
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);
        }
Beispiel #5
0
        private void scaling(double xScale, double yScale, double zScale) // масштабирование
        {
            my_point center_P = center_point();
            Matrix   scale    = scaleMatrix(xScale, yScale, zScale);
            Matrix   displ1   = displMatrix(-center_P.X, -center_P.Y, -center_P.Z);
            Matrix   displ2   = displMatrix(center_P.X, center_P.Y, center_P.Z);

            foreach (face f in shape)
            {
                foreach (my_point p in f.points)
                {
                    p.updateFromVector(displ1.Multiple(p.getVector()));
                    p.updateFromVector(scale.Multiple(p.getVector()));
                    p.updateFromVector(displ2.Multiple(p.getVector()));
                }
            }
        }
Beispiel #6
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);
        }
Beispiel #7
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);
        }
Beispiel #8
0
 private void pictureBox_MouseClick(object sender, MouseEventArgs e)
 {
     if (!is_axis || e.Button != System.Windows.Forms.MouseButtons.Left)
     {
         return;
     }
     if (axis_P1 == null)
     {
         axis_P1 = new my_point((e.X - centerX), (-e.Y + centerY), 0);
         draw_point(axis_P1);
     }
     else
     {
         axis_P2 = new my_point((e.X - centerX), (-e.Y + centerY), 0);
         draw_point(axis_P2);
         g.DrawLine(pen_axis, (int)Math.Round(axis_P1.X + centerX), (int)Math.Round(-axis_P1.Y + centerY), (int)Math.Round(axis_P2.X + centerX), (int)Math.Round(-axis_P2.Y + centerY));
         is_axis = false;
     }
     pictureBox.Image = bmp;
 }
Beispiel #9
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);
        }
Beispiel #10
0
 public void add(my_point p)
 {
     points.Add(p);
 }
Beispiel #11
0
 private void draw_point(my_point p) // рисуем точку
 {
     g.FillEllipse(new SolidBrush(Color.Red), (int)Math.Round(p.X + centerX - 3), (int)Math.Round(-p.Y + centerY - 3), 6, 6);
 }
Beispiel #12
0
 private void axis_del_button_Click(object sender, EventArgs e) // удаляем ось
 {
     axis_P1 = axis_P2 = null;
     redraw_image();
 }
Beispiel #13
0
 private void axis_rotate(my_point pt1, my_point pt2, double angle) // поворот вокруг оси
 {
 }
Beispiel #14
0
 private void scaling(double xScale, double yScale, double zScale) // масштабирование
 {
     my_point center_P = center_point();
 }