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); }
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++; } }
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); }
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); }
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); }