예제 #1
0
파일: Form1.cs 프로젝트: karambaq/lab_08
        private void Displacement(double kx, double ky, double kz) // сдвиг
        {
            Matrix transform = Transformations.Translate(kx, ky, kz);

            foreach (Vector p in shape_points)
            {
                p.updateFromVector(transform.Multiple(p.getVector()));
            }
        }
예제 #2
0
파일: Form1.cs 프로젝트: karambaq/lab_08
        private void Scaling(double xScale, double yScale, double zScale) // масштабирование
        {
            Vector center_P = CenterPoint();

            Matrix scale  = Transformations.Scale(xScale, yScale, zScale);
            Matrix displ1 = Transformations.Translate(-center_P.X, -center_P.Y, -center_P.Z);
            Matrix displ2 = Transformations.Translate(center_P.X, center_P.Y, center_P.Z);

            foreach (Vector p in shape_points)
            {
                p.updateFromVector(displ1.Multiple(p.getVector()));
                p.updateFromVector(scale.Multiple(p.getVector()));
                p.updateFromVector(displ2.Multiple(p.getVector()));
            }
        }
예제 #3
0
파일: Form1.cs 프로젝트: karambaq/lab_08
        private void Rotate(double xangle, double yangle, double zangle) // поворот
        {
            Matrix mx        = Transformations.RotateX(xangle);
            Matrix my        = Transformations.RotateY(yangle);
            Matrix mz        = Transformations.RotateZ(zangle);
            Matrix transform = mx.Multiple(my).Multiple(mz);

            foreach (Vector p in shape_points)
            {
                p.updateFromVector(transform.Multiple(p.getVector()));
                //p.updateFromVector(mx.Multiple(p.getVector()));
                //p.updateFromVector(my.Multiple(p.getVector()));
                //p.updateFromVector(mz.Multiple(p.getVector()));
            }
        }
예제 #4
0
파일: Form1.cs 프로젝트: karambaq/lab_08
        private void CreateRotationFigure(object sender, EventArgs e)
        {
            shape.Clear();
            int    count = (int)countRotation.Value;
            double angle = (360 / count * Math.PI) / 180;
            Matrix m     = Transformations.RotateY(angle);

            for (int c = 0; c < count; c++)
            {
                List <Vector> nextPoints = new List <Vector>();
                for (int i = 0; i < points.Count; i++)
                {
                    Vector p = new Vector();
                    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 - 1]);

                    Face f1 = new Face();
                    f1.add(points[i]);
                    f1.add(nextPoints[i]);
                    f1.add(nextPoints[i - 1]);
                    f.color = Color.Blue;
                    shape.Add(f);
                    shape.Add(f1);
                }
                points = nextPoints;
            }
            points.Clear();
            BuildPoints();
            RedrawImage();
        }