예제 #1
0
        public static void reflectionTransform(Shape shape, TypeReflectionTransform type)
        {
            Line Ox = new Line(new Point(0, 200), new Point(400, 200));

            Ox.setTransformPoint(new Point(0, 0));
            translationTransform(Ox);
            Line Oy = new Line(new Point(200, 200), new Point(400, 400));

            Oy.setTransformPoint(new Point(0, 0));
            translationTransform(Oy);

            switch (shape.getTypeDraw())
            {
            case TypeDraw.Line:
                Line line = (Line)shape;
                line.setStartPoint(reflect(line.getStartPoint(), type));
                line.setEndPoint(reflect(line.getEndPoint(), type));
                break;

            case TypeDraw.Circle:
                Circle circle = (Circle)shape;
                circle.setCenterPoint(reflect(circle.getCenterPoint(), type));
                circle.setEndPoint(reflect(circle.getEndPoint(), type));
                break;

            case TypeDraw.Ellipse:
                Ellipse ellipse = (Ellipse)shape;
                ellipse.setStartPoint(reflect(ellipse.getStartPoint(), type));
                ellipse.setEndHightPoint(reflect(ellipse.getEndHightPoint(), type));
                ellipse.setEndWidthPoint(reflect(ellipse.getEndWidthPoint(), type));
                break;

            case TypeDraw.Parallelogram:
                Parallelogram parallelogram = (Parallelogram)shape;
                parallelogram.setPoint1(reflect(parallelogram.getPoint1(), type));
                parallelogram.setPoint2(reflect(parallelogram.getPoint2(), type));
                parallelogram.setPoint3(reflect(parallelogram.getPoint3(), type));
                break;

            case TypeDraw.Rectangle:
                Rectangle rectangle = (Rectangle)shape;
                rectangle.setStartPoint(reflect(rectangle.getStartPoint(), type));
                rectangle.setEndPoint(reflect(rectangle.getEndPoint(), type));
                break;

            case TypeDraw.Triangle:
                Triangle triangle = (Triangle)shape;
                triangle.setPoint1(reflect(triangle.getPoint1(), type));
                triangle.setPoint2(reflect(triangle.getPoint2(), type));
                triangle.setPoint3(reflect(triangle.getPoint3(), type));
                break;

            case TypeDraw.Square:
                Square square = (Square)shape;
                square.setPoint1(reflect(square.getPoint1(), type));
                square.setPoint2(reflect(square.getPoint2(), type));
                break;
            }
            shape.setTransformFlag(false);
        }
예제 #2
0
        public void MidPoint_Ellipse(Ellipse ellipse)//,bool dottedEllipseFlag=false)
        {
            bool dottedEllipseFlag = ellipse.getDottedEllipseFlag();
            //int x1, y1, x2, y2, centerX, centerY;
            int x, y, fx, fy, a2, b2, p, a, b;

            //if (!ellipse.getChangeFlag())
            //{
            //a = (int)ellipse.getWidthRadius();
            //b = (int)ellipse.getHeightRadius();
            //}
            //else
            //{
            if (Math.Abs((int)ellipse.getEndHightPoint().Y) > Math.Abs((int)ellipse.getEndWidthPoint().Y))
            {
                a = (int)ellipse.getHeightRadius();
                b = (int)ellipse.getWidthRadius();
            }
            else
            {
                b = (int)ellipse.getHeightRadius();
                a = (int)ellipse.getWidthRadius();
            }


            //}

            a2 = a * a;
            b2 = b * b;
            x  = 0;
            y  = b;
            fx = 0;
            fy = 2 * a2 * y;
            put4pixel(x, y, ellipse.getStartPoint().X, ellipse.getStartPoint().Y, ellipse.getColor());
            p = round(b2 - (a2 * b) + (0.25 * a2));//p=b2 - a2*b +a2/4
            int count = 0;

            while (fx < fy)
            {
                x++;
                fx += 2 * b2;
                //delay(50);
                if (p < 0)
                {
                    p += b2 * (2 * x + 3);//p=p + b2*(2x +3)
                }
                else
                {
                    y--;
                    p  += b2 * (2 * x + 3) + a2 * (2 - 2 * y);//p=p +b2(2x +3) +a2(2-2y)
                    fy -= 2 * a2;
                }
                if (dottedEllipseFlag)
                {
                    if (count % 10 != 0)
                    {
                        put4pixel(x, y, ellipse.getStartPoint().X, ellipse.getStartPoint().Y, ellipse.getColor(), dottedEllipseFlag);
                    }
                    else
                    {
                        put4pixel(x, y, ellipse.getStartPoint().X, ellipse.getStartPoint().Y, ellipse.getColor());
                    }
                }
                else
                {
                    put4pixel(x, y, ellipse.getStartPoint().X, ellipse.getStartPoint().Y, ellipse.getColor());
                }
                count++;
            }
            p = round(b2 * (x + 0.5) * (x + 0.5) + a2 * (y - 1) * (y - 1) - a2 * b2);
            //
            count = 0;
            while (y > 0)
            {
                y--;
                fy -= 2 * a2;
                // delay(50);
                if (p >= 0)
                {
                    p += a2 * (3 - 2 * y); //p=p +a2(3-2y)
                }
                else
                {
                    x++;
                    fx += 2 * b2;
                    p  += b2 * (2 * x + 2) + a2 * (3 - 2 * y);//p=p+ b2(2x +2) + a2(3-2y)
                }
                //if (dottedEllipseFlag && count % 20 == 0)
                put4pixel(x, y, ellipse.getStartPoint().X, ellipse.getStartPoint().Y, ellipse.getColor());//, dottedEllipseFlag);
                //else if (dottedEllipseFlag && count % 20 == 0)
                //put4pixel(ellipse.getStartPoint().X, ellipse.getStartPoint().Y, x, y, ellipse.getColor());

                count++;
            }
        }
예제 #3
0
        public static void rotationTransform(Shape shape, float rotation)
        {
            Point oldPositionShape = new Point(0, 0);

            switch (shape.getTypeDraw())
            {
            case TypeDraw.Circle:
                Circle circle = (Circle)shape;
                oldPositionShape = circle.getCenterPoint();
                break;

            case TypeDraw.Ellipse:
                Ellipse ellipse = (Ellipse)shape;
                oldPositionShape = ellipse.getStartPoint();
                break;

            case TypeDraw.Line:
                Line line = (Line)shape;
                oldPositionShape = line.getStartPoint();
                break;

            case TypeDraw.Parallelogram:
                Parallelogram parallelogram = (Parallelogram)shape;
                oldPositionShape = parallelogram.getPoint1();
                break;

            case TypeDraw.Rectangle:
                Rectangle rectangle = (Rectangle)shape;
                oldPositionShape = rectangle.getStartPoint();
                break;

            case TypeDraw.Rhombus:
                Rhombus rhombus = (Rhombus)shape;
                oldPositionShape = rhombus.getPoint1();
                break;

            case TypeDraw.Square:
                Square square = (Square)shape;
                oldPositionShape = square.getPoint1();
                break;

            case TypeDraw.Triangle:
                Triangle triangle = (Triangle)shape;
                oldPositionShape = triangle.getPoint1();
                break;
            }
            shape.setTransformPoint(new Point(0, 0));
            translationTransform(shape);

            double sin = Math.Sin((Math.PI * rotation) / 180);
            double cos = Math.Cos((Math.PI * rotation) / 180);

            switch (shape.getTypeDraw())
            {
            case TypeDraw.Circle:
                Circle circle = (Circle)shape;
                circle.setCenterPoint(multiMatrix(TypeTransform.Rotation, sin, cos, new double[3] {
                    circle.getCenterPoint().X, circle.getCenterPoint().Y, 1
                }));
                circle.setEndPoint(multiMatrix(TypeTransform.Rotation, sin, cos, new double[3] {
                    circle.getEndPoint().X, circle.getEndPoint().Y, 1
                }));
                break;

            case TypeDraw.Ellipse:
                Ellipse ellipse = (Ellipse)shape;
                ellipse.setStartPoint(multiMatrix(TypeTransform.Rotation, sin, cos, new double[3] {
                    ellipse.getStartPoint().X, ellipse.getStartPoint().Y, 1
                }));
                ellipse.setEndHightPoint(multiMatrix(TypeTransform.Rotation, sin, cos, new double[3] {
                    ellipse.getEndHightPoint().X, ellipse.getEndHightPoint().Y, 1
                }));
                ellipse.setEndWidthPoint(multiMatrix(TypeTransform.Rotation, sin, cos, new double[3] {
                    ellipse.getEndWidthPoint().X, ellipse.getEndWidthPoint().Y, 1
                }));
                break;

            case TypeDraw.Line:
                Line line = (Line)shape;
                line.setStartPoint(multiMatrix(TypeTransform.Rotation, sin, cos, new double[3] {
                    line.getStartPoint().X, line.getStartPoint().Y, 1
                }));
                line.setEndPoint(multiMatrix(TypeTransform.Rotation, sin, cos, new double[3] {
                    line.getEndPoint().X, line.getEndPoint().Y, 1
                }));
                break;

            case TypeDraw.Parallelogram:
                Parallelogram parallelogram = (Parallelogram)shape;
                parallelogram.setPoint1(multiMatrix(TypeTransform.Rotation, sin, cos, new double[3] {
                    parallelogram.getPoint1().X, parallelogram.getPoint1().Y, 1
                }));
                parallelogram.setPoint2(multiMatrix(TypeTransform.Rotation, sin, cos, new double[3] {
                    parallelogram.getPoint2().X, parallelogram.getPoint2().Y, 1
                }));
                parallelogram.setPoint3(multiMatrix(TypeTransform.Rotation, sin, cos, new double[3] {
                    parallelogram.getPoint3().X, parallelogram.getPoint3().Y, 1
                }));
                break;

            case TypeDraw.Rectangle:
                Rectangle rectangle = (Rectangle)shape;
                rectangle.setStartPoint(multiMatrix(TypeTransform.Rotation, sin, cos, new double[3] {
                    rectangle.getStartPoint().X, rectangle.getStartPoint().Y, 1
                }));
                rectangle.setEndPoint(multiMatrix(TypeTransform.Rotation, sin, cos, new double[3] {
                    rectangle.getEndPoint().X, rectangle.getEndPoint().Y, 1
                }));
                break;

            case TypeDraw.Rhombus:
                Rhombus rhombus = (Rhombus)shape;
                //not yet completed
                break;

            case TypeDraw.Square:
                Square square = (Square)shape;
                square.setPoint1(multiMatrix(TypeTransform.Rotation, sin, cos, new double[3] {
                    square.getPoint1().X, square.getPoint1().Y, 1
                }));
                square.setPoint2(multiMatrix(TypeTransform.Rotation, sin, cos, new double[3] {
                    square.getPoint2().X, square.getPoint2().Y, 1
                }));
                break;

            case TypeDraw.Triangle:
                Triangle triangle = (Triangle)shape;
                triangle.setPoint1(multiMatrix(TypeTransform.Rotation, sin, cos, new double[3] {
                    triangle.getPoint1().X, triangle.getPoint1().Y, 1
                }));
                triangle.setPoint2(multiMatrix(TypeTransform.Rotation, sin, cos, new double[3] {
                    triangle.getPoint2().X, triangle.getPoint2().Y, 1
                }));
                triangle.setPoint3(multiMatrix(TypeTransform.Rotation, sin, cos, new double[3] {
                    triangle.getPoint3().X, triangle.getPoint3().Y, 1
                }));
                break;
            }
            shape.setTransformPoint(oldPositionShape);
            translationTransform(shape);
        }
예제 #4
0
        public static void scalingTransform(Shape shape, int scalingX, int scalingY)
        {
            //Shape tempShape=shape;
            Point oldPoint = new Point(0, 0);

            shape.setTransformPoint(new Point(0, 0));

            switch (shape.getTypeDraw())
            {
            case TypeDraw.Line:
                Line line = (Line)shape;
                oldPoint = line.getStartPoint();
                translationTransform(shape);
                line.setStartPoint(multiMatrix(TypeTransform.Scaling, scalingX, scalingY, new double[3] {
                    line.getStartPoint().X, line.getStartPoint().Y, 1
                }));
                //if (line.getStartPoint().X < line.getEndPoint().X && line.getStartPoint().Y < line.getEndPoint().Y)
                //{
                //    if (line.getStartPoint().X > line.getEndPoint().X)
                //        scalingX = -scalingX;
                //    if (line.getStartPoint().Y > line.getEndPoint().Y)
                //        scalingY = -scalingY;
                //}
                //else if (line.getStartPoint().X < line.getEndPoint().X && line.getStartPoint().Y > line.getEndPoint().Y)
                //{
                //    if (line.getStartPoint().X > line.getEndPoint().X)
                //        scalingX = -scalingX;
                //    if (line.getStartPoint().Y < line.getEndPoint().Y)
                //        scalingY = -scalingY;
                //}
                line.setEndPoint(multiMatrix(TypeTransform.Scaling, scalingX, scalingY, new double[3] {
                    line.getEndPoint().X, line.getEndPoint().Y, 1
                }));
                //line.setEndPoint(new Point(line.getEndPoint().X + scalingX * (line.getEndPoint().X-line.getStartPoint().X), line.getEndPoint().Y + scalingY * (line.getEndPoint().Y - line.getStartPoint().Y)));
                break;

            case TypeDraw.Circle:
                Circle circle = (Circle)shape;
                oldPoint = circle.getCenterPoint();
                translationTransform(shape);
                circle.setCenterPoint(multiMatrix(TypeTransform.Scaling, scalingX, scalingY, new double[3] {
                    circle.getCenterPoint().X, circle.getCenterPoint().Y, 1
                }));
                circle.setEndPoint(multiMatrix(TypeTransform.Scaling, scalingX, scalingY, new double[3] {
                    circle.getEndPoint().X, circle.getEndPoint().Y, 1
                }));
                //if (circle.getCenterPoint().X < circle.getEndPoint().X)
                //    scalingX = -scalingX;
                //if (circle.getCenterPoint().Y < circle.getEndPoint().Y)
                //    scalingY = -scalingY;
                //circle.setEndPoint(new Point(circle.getEndPoint().X + scalingX * (circle.getEndPoint().X - circle.getCenterPoint().X), circle.getEndPoint().Y + scalingY * (circle.getEndPoint().Y - circle.getCenterPoint().Y)));
                break;

            case TypeDraw.Ellipse:
                Ellipse ellipse = (Ellipse)shape;
                oldPoint = ellipse.getStartPoint();
                translationTransform(shape);
                //ellipse.setStartPoint(multiMatrix(TypeTransform.Scaling, scalingX, scalingY, new double[3] { ellipse.getStartPoint().X, ellipse.getStartPoint().Y, 1 }));
                ellipse.setEndHightPoint(multiMatrix(TypeTransform.Scaling, scalingX, scalingY, new double[3] {
                    ellipse.getEndHightPoint().X, ellipse.getEndHightPoint().Y, 1
                }));
                ellipse.setEndWidthPoint(multiMatrix(TypeTransform.Scaling, scalingX, scalingY, new double[3] {
                    ellipse.getEndWidthPoint().X, ellipse.getEndWidthPoint().Y, 1
                }));
                break;

            case TypeDraw.Parallelogram:
                Parallelogram parallelogram = (Parallelogram)shape;
                oldPoint = parallelogram.getPoint1();
                translationTransform(shape);
                //parallelogram.setPoint1(multiMatrix(TypeTransform.Scaling, scalingX, scalingY, new double[3] { parallelogram.getPoint1().X, parallelogram.getPoint1().Y, 1 }));
                parallelogram.setPoint2(multiMatrix(TypeTransform.Scaling, scalingX, scalingY, new double[3] {
                    parallelogram.getPoint2().X, parallelogram.getPoint2().Y, 1
                }));
                parallelogram.setPoint3(multiMatrix(TypeTransform.Translation, scalingX, scalingY, new double[3] {
                    parallelogram.getPoint3().X, parallelogram.getPoint3().Y, 1
                }));
                //parallelogram.setPoint4(multiMatrix(dx, dy, new double[3] { parallelogram.getPoint1().X, parallelogram.getPoint1().Y, 1 }));
                break;

            case TypeDraw.Rectangle:
                Rectangle rectangle = (Rectangle)shape;
                oldPoint = rectangle.getStartPoint();
                translationTransform(shape);
                //rectangle.setStartPoint(multiMatrix(TypeTransform.Scaling, scalingX, scalingY, new double[3] { rectangle.getStartPoint().X, rectangle.getStartPoint().Y, 1 }));
                rectangle.setEndPoint(multiMatrix(TypeTransform.Scaling, scalingX, scalingY, new double[3] {
                    rectangle.getEndPoint().X, rectangle.getEndPoint().Y, 1
                }));
                break;

            case TypeDraw.Triangle:
                Triangle triangle = (Triangle)shape;
                oldPoint = triangle.getPoint1();
                translationTransform(shape);
                //triangle.setPoint1(multiMatrix(TypeTransform.Scaling, scalingX, scalingY, new double[3] { triangle.getPoint1().X, triangle.getPoint1().Y, 1 }));
                triangle.setPoint2(multiMatrix(TypeTransform.Scaling, scalingX, scalingY, new double[3] {
                    triangle.getPoint2().X, triangle.getPoint2().Y, 1
                }));
                triangle.setPoint3(multiMatrix(TypeTransform.Scaling, scalingX, scalingY, new double[3] {
                    triangle.getPoint3().X, triangle.getPoint3().Y, 1
                }));
                break;

            case TypeDraw.Square:
                Square square = (Square)shape;
                oldPoint = square.getPoint1();
                translationTransform(shape);
                square.setPoint2(multiMatrix(TypeTransform.Scaling, scalingX, scalingY, new double[3] {
                    square.getPoint2().X, square.getPoint2().Y, 1
                }));
                break;
            }
            shape.setTransformPoint(oldPoint);
            translationTransform(shape);
            shape.setTransformFlag(false);
        }
예제 #5
0
        public static void translationTransform(Shape shape)
        {
            int   dx, dy;
            Point newPosition = shape.getTransformPoint();

            switch (shape.getTypeDraw())
            {
            case TypeDraw.Line:
                Line line = (Line)shape;
                dx = newPosition.X - line.getStartPoint().X;
                dy = newPosition.Y - line.getStartPoint().Y;
                line.setStartPoint(multiMatrix(TypeTransform.Translation, dx, dy, new double[3] {
                    line.getStartPoint().X, line.getStartPoint().Y, 1
                }));
                line.setEndPoint(multiMatrix(TypeTransform.Translation, dx, dy, new double[3] {
                    line.getEndPoint().X, line.getEndPoint().Y, 1
                }));
                break;

            case TypeDraw.Circle:
                Circle circle = (Circle)shape;
                dx = newPosition.X - circle.getCenterPoint().X;
                dy = newPosition.Y - circle.getCenterPoint().Y;
                circle.setCenterPoint(multiMatrix(TypeTransform.Translation, dx, dy, new double[3] {
                    circle.getCenterPoint().X, circle.getCenterPoint().Y, 1
                }));
                circle.setEndPoint(multiMatrix(TypeTransform.Translation, dx, dy, new double[3] {
                    circle.getEndPoint().X, circle.getEndPoint().Y, 1
                }));
                break;

            case TypeDraw.Ellipse:
                Ellipse ellipse = (Ellipse)shape;
                dx = newPosition.X - ellipse.getStartPoint().X;
                dy = newPosition.Y - ellipse.getStartPoint().Y;
                ellipse.setStartPoint(multiMatrix(TypeTransform.Translation, dx, dy, new double[3] {
                    ellipse.getStartPoint().X, ellipse.getStartPoint().Y, 1
                }));
                ellipse.setEndHightPoint(multiMatrix(TypeTransform.Translation, dx, dy, new double[3] {
                    ellipse.getEndHightPoint().X, ellipse.getEndHightPoint().Y, 1
                }));
                ellipse.setEndWidthPoint(multiMatrix(TypeTransform.Translation, dx, dy, new double[3] {
                    ellipse.getEndWidthPoint().X, ellipse.getEndWidthPoint().Y, 1
                }));
                break;

            case TypeDraw.Parallelogram:
                Parallelogram parallelogram = (Parallelogram)shape;
                dx = newPosition.X - parallelogram.getPoint1().X;
                dy = newPosition.Y - parallelogram.getPoint1().Y;
                parallelogram.setPoint1(multiMatrix(TypeTransform.Translation, dx, dy, new double[3] {
                    parallelogram.getPoint1().X, parallelogram.getPoint1().Y, 1
                }));
                parallelogram.setPoint2(multiMatrix(TypeTransform.Translation, dx, dy, new double[3] {
                    parallelogram.getPoint2().X, parallelogram.getPoint2().Y, 1
                }));
                parallelogram.setPoint3(multiMatrix(TypeTransform.Translation, dx, dy, new double[3] {
                    parallelogram.getPoint3().X, parallelogram.getPoint3().Y, 1
                }));
                //parallelogram.setPoint4(multiMatrix(dx, dy, new double[3] { parallelogram.getPoint1().X, parallelogram.getPoint1().Y, 1 }));
                break;

            case TypeDraw.Rectangle:
                Rectangle rectangle = (Rectangle)shape;
                dx = newPosition.X - rectangle.getStartPoint().X;
                dy = newPosition.Y - rectangle.getStartPoint().Y;
                rectangle.setStartPoint(multiMatrix(TypeTransform.Translation, dx, dy, new double[3] {
                    rectangle.getStartPoint().X, rectangle.getStartPoint().Y, 1
                }));
                rectangle.setEndPoint(multiMatrix(TypeTransform.Translation, dx, dy, new double[3] {
                    rectangle.getEndPoint().X, rectangle.getEndPoint().Y, 1
                }));
                break;

            case TypeDraw.Triangle:
                Triangle triangle = (Triangle)shape;
                dx = newPosition.X - triangle.getPoint1().X;
                dy = newPosition.Y - triangle.getPoint1().Y;
                triangle.setPoint1(multiMatrix(TypeTransform.Translation, dx, dy, new double[3] {
                    triangle.getPoint1().X, triangle.getPoint1().Y, 1
                }));
                triangle.setPoint2(multiMatrix(TypeTransform.Translation, dx, dy, new double[3] {
                    triangle.getPoint2().X, triangle.getPoint2().Y, 1
                }));
                triangle.setPoint3(multiMatrix(TypeTransform.Translation, dx, dy, new double[3] {
                    triangle.getPoint3().X, triangle.getPoint3().Y, 1
                }));
                break;

            case TypeDraw.Square:
                Square square = (Square)shape;
                dx = newPosition.X - square.getPoint1().X;
                dy = newPosition.Y - square.getPoint1().Y;
                square.setPoint1(multiMatrix(TypeTransform.Translation, dx, dy, new double[3] {
                    square.getPoint1().X, square.getPoint1().Y, 1
                }));
                square.setPoint2(multiMatrix(TypeTransform.Translation, dx, dy, new double[3] {
                    square.getPoint2().X, square.getPoint2().Y, 1
                }));
                break;
            }
            shape.setTransformFlag(false);
        }