Java Graphics - Scale Polygon using AffineTransform
I have given here Java Graphics program to scale a Polygon using AffineTransform
Source Code
import java.lang.*; import java.util.*; import java.util.List; import java.io.*; import java.awt.*; import java.awt.event.*; import java.awt.geom.*; public class ScalePolygon extends Frame { public Polygon mypolygon = new Polygon(); public Polygon mypolygon2 = new Polygon(); public void paint(Graphics g) { Graphics2D ga = (Graphics2D)g; ga.setPaint(Color.red); ga.draw(mypolygon); ga.setPaint(Color.green); /*** AffineTransform defaultTransformation = ga.getTransform(); AffineTransform newscaleTransformation = new AffineTransform(); newscaleTransformation.scale(2, 2); ga.setTransform(newscaleTransformation); ***/ ga.draw(mypolygon2); } public static int ReadInteger() { try { InputStreamReader input = new InputStreamReader(System.in); BufferedReader reader = new BufferedReader(input); return Integer.parseInt(reader.readLine()); } catch (Exception e) { e.printStackTrace(); return 0; } } public static List< Integer > ScaleTranform(List< Integer > srcpoints, double x, double y) { AffineTransform newscaleTransformation = new AffineTransform(); double[] src = new double[100]; double[] dest = new double[100]; for(int i = 0; i < srcpoints.size(); i++) src[i] = srcpoints.get(i); newscaleTransformation.scale(2, 2); newscaleTransformation.translate(-src[0] * 0.62,-src[1] * 0.5); newscaleTransformation.transform(src,0,dest,0,srcpoints.size() / 2); List< Integer > destpoints = new ArrayList< Integer >(); for(int i = 0; i < srcpoints.size(); i++) destpoints.add((int) dest[i]); return destpoints; } public static void main(String args[]) { List< Integer > srcpoints = new ArrayList< Integer >(); /*** System.out.format("Enter Number of points: "); int n = ReadInteger(); for(int i = 0; i < n; i++) { System.out.format("Enter x[%d]: ", i + 1); srcpoints.add(ReadInteger()); System.out.format("Enter y[%d]: ", i + 1); srcpoints.add(ReadInteger()); } ***/ srcpoints.add(100);srcpoints.add(100); srcpoints.add(75);srcpoints.add(75); srcpoints.add(150);srcpoints.add(100); srcpoints.add(75);srcpoints.add(125); srcpoints.add(srcpoints.get(0)); srcpoints.add(srcpoints.get(1)); ScalePolygon frame = new ScalePolygon(); for(int i = 0; i < srcpoints.size(); i++) { int x = srcpoints.get(i++); int y = srcpoints.get(i); frame.mypolygon.addPoint(x, y); } List< Integer > destpoints = ScaleTranform(srcpoints, 2, 2); for(int i = 0; i < destpoints.size(); i++) { int x = destpoints.get(i++); int y = destpoints.get(i); frame.mypolygon2.addPoint(x, y); } frame.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent we) { System.exit(0); } } ); frame.setSize(400, 400); frame.setVisible(true); } } /*** Enter Number of points: 4 Enter x[1]: 100 Enter y[1]: 100 Enter x[2]: 150 Enter y[2]: 100 Enter x[3]: 150 Enter y[3]: 150 Enter x[4]: 100 Enter y[4]: 150 ***/
Output
|