<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2F2D_Graphics%2FTranformation</id>
		<title>Java Tutorial/2D Graphics/Tranformation - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2F2D_Graphics%2FTranformation"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_Tutorial/2D_Graphics/Tranformation&amp;action=history"/>
		<updated>2026-06-06T15:39:47Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java_Tutorial/2D_Graphics/Tranformation&amp;diff=3528&amp;oldid=prev</id>
		<title> в 17:44, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_Tutorial/2D_Graphics/Tranformation&amp;diff=3528&amp;oldid=prev"/>
				<updated>2010-05-31T17:44:26Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 17:44, 31 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java_Tutorial/2D_Graphics/Tranformation&amp;diff=3529&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_Tutorial/2D_Graphics/Tranformation&amp;diff=3529&amp;oldid=prev"/>
				<updated>2010-05-31T15:25:29Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==  Calculate Rotation Transform with Math.PI ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Canvas;&lt;br /&gt;
import java.awt.Font;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.Image;&lt;br /&gt;
import java.awt.Toolkit;&lt;br /&gt;
import java.awt.geom.AffineTransform;&lt;br /&gt;
import java.awt.geom.Line2D;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
public class Draw2DRotate extends JFrame {&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    Draw2DRotate app = new Draw2DRotate();&lt;br /&gt;
  }&lt;br /&gt;
  public Draw2DRotate() {&lt;br /&gt;
    add(&amp;quot;Center&amp;quot;, new MyCanvas());&lt;br /&gt;
    setSize(400, 400);&lt;br /&gt;
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class MyCanvas extends Canvas {&lt;br /&gt;
  public void paint(Graphics graphics) {&lt;br /&gt;
    Graphics2D g = (Graphics2D) graphics;&lt;br /&gt;
    AffineTransform transform = AffineTransform.getRotateInstance(Math.PI / 16.0d);&lt;br /&gt;
    g.setTransform(transform);&lt;br /&gt;
    Line2D.Double shape = new Line2D.Double(0.0, 0.0, 300.0, 300.0);&lt;br /&gt;
    g.draw(shape);&lt;br /&gt;
    g.setFont(new Font(&amp;quot;Helvetica&amp;quot;, Font.BOLD, 24));&lt;br /&gt;
    String text = (&amp;quot;jexp&amp;quot;);&lt;br /&gt;
    g.drawString(text, 300, 50);&lt;br /&gt;
    Toolkit toolkit = Toolkit.getDefaultToolkit();&lt;br /&gt;
    Image image = toolkit.getImage(&amp;quot;image1.gif&amp;quot;);&lt;br /&gt;
    g.drawImage(image, 100, 150, this);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Coordinate Translation. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
public class Translation extends JPanel {&lt;br /&gt;
  public void paint(Graphics g) {&lt;br /&gt;
    super.paint(g);&lt;br /&gt;
    Graphics2D g2d = (Graphics2D) g;&lt;br /&gt;
    g2d.setColor(new Color(150, 150, 150));&lt;br /&gt;
    g2d.fillRect(20, 20, 80, 50);&lt;br /&gt;
    g2d.translate(150, 50);&lt;br /&gt;
    g2d.fillRect(20, 20, 80, 50);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame frame = new JFrame(&amp;quot;Translation&amp;quot;);&lt;br /&gt;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    frame.add(new Translation());&lt;br /&gt;
    frame.setSize(300, 200);&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Move and scale graphical objects with a mouse on the panel ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.RenderingHints;&lt;br /&gt;
import java.awt.event.MouseAdapter;&lt;br /&gt;
import java.awt.event.MouseEvent;&lt;br /&gt;
import java.awt.event.MouseWheelEvent;&lt;br /&gt;
import java.awt.event.MouseWheelListener;&lt;br /&gt;
import java.awt.geom.Rectangle2D;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
public class MouseMoveScale extends JPanel {&lt;br /&gt;
  private Rectangle2D.Float myRect = new Rectangle2D.Float(50, 50, 50, 50);&lt;br /&gt;
  MovingAdapter ma = new MovingAdapter();&lt;br /&gt;
  public MouseMoveScale() {&lt;br /&gt;
    addMouseMotionListener(ma);&lt;br /&gt;
    addMouseListener(ma);&lt;br /&gt;
    addMouseWheelListener(new ScaleHandler());&lt;br /&gt;
  }&lt;br /&gt;
  public void paint(Graphics g) {&lt;br /&gt;
    super.paint(g);&lt;br /&gt;
    Graphics2D g2d = (Graphics2D) g;&lt;br /&gt;
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);&lt;br /&gt;
    g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,&lt;br /&gt;
        RenderingHints.VALUE_TEXT_ANTIALIAS_ON);&lt;br /&gt;
    g2d.setColor(new Color(0, 0, 200));&lt;br /&gt;
    g2d.fill(myRect);&lt;br /&gt;
  }&lt;br /&gt;
  class MovingAdapter extends MouseAdapter {&lt;br /&gt;
    private int x;&lt;br /&gt;
    private int y;&lt;br /&gt;
    public void mousePressed(MouseEvent e) {&lt;br /&gt;
      x = e.getX();&lt;br /&gt;
      y = e.getY();&lt;br /&gt;
    }&lt;br /&gt;
    public void mouseDragged(MouseEvent e) {&lt;br /&gt;
      int dx = e.getX() - x;&lt;br /&gt;
      int dy = e.getY() - y;&lt;br /&gt;
      if (myRect.getBounds2D().contains(x, y)) {&lt;br /&gt;
        myRect.x += dx;&lt;br /&gt;
        myRect.y += dy;&lt;br /&gt;
        repaint();&lt;br /&gt;
      }&lt;br /&gt;
      x += dx;&lt;br /&gt;
      y += dy;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  class ScaleHandler implements MouseWheelListener {&lt;br /&gt;
    public void mouseWheelMoved(MouseWheelEvent e) {&lt;br /&gt;
      int x = e.getX();&lt;br /&gt;
      int y = e.getY();&lt;br /&gt;
      if (e.getScrollType() == MouseWheelEvent.WHEEL_UNIT_SCROLL) {&lt;br /&gt;
        if (myRect.getBounds2D().contains(x, y)) {&lt;br /&gt;
          float amount = e.getWheelRotation() * 5f;&lt;br /&gt;
          myRect.width += amount;&lt;br /&gt;
          myRect.height += amount;&lt;br /&gt;
          repaint();&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame frame = new JFrame(&amp;quot;Moving and Scaling&amp;quot;);&lt;br /&gt;
    MouseMoveScale m = new MouseMoveScale();&lt;br /&gt;
    m.setDoubleBuffered(true);&lt;br /&gt;
    frame.add(m);&lt;br /&gt;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    frame.setSize(300, 300);&lt;br /&gt;
    frame.setLocationRelativeTo(null);&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Rotate a line of character (String) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Font;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.RenderingHints;&lt;br /&gt;
import java.awt.Shape;&lt;br /&gt;
import java.awt.font.FontRenderContext;&lt;br /&gt;
import java.awt.font.GlyphVector;&lt;br /&gt;
import java.awt.geom.AffineTransform;&lt;br /&gt;
import java.awt.geom.Point2D;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
public class RotatedText extends JPanel {&lt;br /&gt;
  public void paint(Graphics g) {&lt;br /&gt;
    Graphics2D g2d = (Graphics2D) g;&lt;br /&gt;
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);&lt;br /&gt;
    String s = &amp;quot;111111111111111111111111111111&amp;quot;;&lt;br /&gt;
    Font font = new Font(&amp;quot;Courier&amp;quot;, Font.PLAIN, 12);&lt;br /&gt;
    g2d.translate(20, 20);&lt;br /&gt;
    FontRenderContext frc = g2d.getFontRenderContext();&lt;br /&gt;
    GlyphVector gv = font.createGlyphVector(frc, s);&lt;br /&gt;
    int length = gv.getNumGlyphs();&lt;br /&gt;
    for (int i = 0; i &amp;lt; length; i++) {&lt;br /&gt;
      Point2D p = gv.getGlyphPosition(i);&lt;br /&gt;
      AffineTransform at = AffineTransform.getTranslateInstance(p.getX(), p.getY());&lt;br /&gt;
      at.rotate((double) i / (double) (length - 1) * Math.PI / 3);&lt;br /&gt;
      Shape glyph = gv.getGlyphOutline(i);&lt;br /&gt;
      Shape transformedGlyph = at.createTransformedShape(glyph);&lt;br /&gt;
      g2d.fill(transformedGlyph);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame frame = new JFrame(&amp;quot;Rotated text&amp;quot;);&lt;br /&gt;
    frame.add(new RotatedText());&lt;br /&gt;
    frame.setSize(400, 300);&lt;br /&gt;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    frame.setLocationRelativeTo(null);&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Rotates a shape about the specified coordinates. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/* &lt;br /&gt;
 * JCommon : a free general purpose class library for the Java(tm) platform&lt;br /&gt;
 * &lt;br /&gt;
 *&lt;br /&gt;
 * (C) Copyright 2000-2008, by Object Refinery Limited and Contributors.&lt;br /&gt;
 *&lt;br /&gt;
 * Project Info:  http://www.jfree.org/jcommon/index.html&lt;br /&gt;
 *&lt;br /&gt;
 * This library is free software; you can redistribute it and/or modify it&lt;br /&gt;
 * under the terms of the GNU Lesser General Public License as published by&lt;br /&gt;
 * the Free Software Foundation; either version 2.1 of the License, or&lt;br /&gt;
 * (at your option) any later version.&lt;br /&gt;
 *&lt;br /&gt;
 * This library is distributed in the hope that it will be useful, but&lt;br /&gt;
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY&lt;br /&gt;
 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public&lt;br /&gt;
 * License for more details.&lt;br /&gt;
 *&lt;br /&gt;
 * You should have received a copy of the GNU Lesser General Public&lt;br /&gt;
 * License along with this library; if not, write to the Free Software&lt;br /&gt;
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,&lt;br /&gt;
 * USA.&lt;br /&gt;
 *&lt;br /&gt;
 * [Java is a trademark or registered trademark of Sun Microsystems, Inc.&lt;br /&gt;
 * in the United States and other countries.]&lt;br /&gt;
 *&lt;br /&gt;
 * -------------------&lt;br /&gt;
 * ShapeUtilities.java&lt;br /&gt;
 * -------------------&lt;br /&gt;
 * (C)opyright 2003-2008, by Object Refinery Limited and Contributors.&lt;br /&gt;
 *&lt;br /&gt;
 * Original Author:  David Gilbert (for Object Refinery Limited);&lt;br /&gt;
 * Contributor(s):   -;&lt;br /&gt;
 *&lt;br /&gt;
 * $Id: ShapeUtilities.java,v 1.18 2008/06/02 06:58:28 mungady Exp $&lt;br /&gt;
 *&lt;br /&gt;
 * Changes&lt;br /&gt;
 * -------&lt;br /&gt;
 * 13-Aug-2003 : Version 1 (DG);&lt;br /&gt;
 * 16-Mar-2004 : Moved rotateShape() from RefineryUtilities.java to here (DG);&lt;br /&gt;
 * 13-May-2004 : Added new shape creation methods (DG);&lt;br /&gt;
 * 30-Sep-2004 : Added createLineRegion() method (DG);&lt;br /&gt;
 *               Moved drawRotatedShape() method from RefineryUtilities class&lt;br /&gt;
 *               to this class (DG);&lt;br /&gt;
 * 04-Oct-2004 : Renamed ShapeUtils --&amp;gt; ShapeUtilities (DG);&lt;br /&gt;
 * 26-Oct-2004 : Added a method to test the equality of two Line2D&lt;br /&gt;
 *               instances (DG);&lt;br /&gt;
 * 10-Nov-2004 : Added new translateShape() and equal(Ellipse2D, Ellipse2D)&lt;br /&gt;
 *               methods (DG);&lt;br /&gt;
 * 11-Nov-2004 : Renamed translateShape() --&amp;gt; createTranslatedShape() (DG);&lt;br /&gt;
 * 07-Jan-2005 : Minor Javadoc fix (DG);&lt;br /&gt;
 * 11-Jan-2005 : Removed deprecated code in preparation for 1.0.0 release (DG);&lt;br /&gt;
 * 21-Jan-2005 : Modified return type of RectangleAnchor.coordinates()&lt;br /&gt;
 *               method (DG);&lt;br /&gt;
 * 22-Feb-2005 : Added equality tests for Arc2D and GeneralPath (DG);&lt;br /&gt;
 * 16-Mar-2005 : Fixed bug where equal(Shape, Shape) fails for two Polygon&lt;br /&gt;
 *               instances (DG);&lt;br /&gt;
 * 01-Jun-2008 : Fixed bug in equal(GeneralPath, GeneralPath) method (DG);&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
import java.awt.Shape;&lt;br /&gt;
import java.awt.geom.AffineTransform;&lt;br /&gt;
import java.awt.geom.Point2D;&lt;br /&gt;
/**&lt;br /&gt;
 * Utility methods for {@link Shape} objects.&lt;br /&gt;
 *&lt;br /&gt;
 * @author David Gilbert&lt;br /&gt;
 */&lt;br /&gt;
public class Main {&lt;br /&gt;
  /**&lt;br /&gt;
   * Rotates a shape about the specified coordinates.&lt;br /&gt;
   *&lt;br /&gt;
   * @param base  the shape (&amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; permitted, returns&lt;br /&gt;
   *              &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt;).&lt;br /&gt;
   * @param angle  the angle (in radians).&lt;br /&gt;
   * @param x  the x coordinate for the rotation point (in Java2D space).&lt;br /&gt;
   * @param y  the y coordinate for the rotation point (in Java2D space).&lt;br /&gt;
   *&lt;br /&gt;
   * @return the rotated shape.&lt;br /&gt;
   */&lt;br /&gt;
  public static Shape rotateShape(final Shape base, final double angle,&lt;br /&gt;
                                  final float x, final float y) {&lt;br /&gt;
      if (base == null) {&lt;br /&gt;
          return null;&lt;br /&gt;
      }&lt;br /&gt;
      final AffineTransform rotate = AffineTransform.getRotateInstance(&lt;br /&gt;
              angle, x, y);&lt;br /&gt;
      final Shape result = rotate.createTransformedShape(base);&lt;br /&gt;
      return result;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Rotating image using Java 2D AffineTransform class ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.Image;&lt;br /&gt;
import java.awt.Rectangle;&lt;br /&gt;
import java.awt.geom.AffineTransform;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
class ImagePanel extends JPanel {&lt;br /&gt;
  int offset = 5;&lt;br /&gt;
  private Image image;&lt;br /&gt;
  private int angle;&lt;br /&gt;
  private int w, h;&lt;br /&gt;
  private AffineTransform transform;&lt;br /&gt;
  public ImagePanel(Image i) {&lt;br /&gt;
    image = i;&lt;br /&gt;
    w = image.getWidth(this);&lt;br /&gt;
    h = image.getHeight(this);&lt;br /&gt;
    transform = new AffineTransform();&lt;br /&gt;
  }&lt;br /&gt;
  public void paintComponent(Graphics grp) {&lt;br /&gt;
    Rectangle rect = this.getBounds();&lt;br /&gt;
    Graphics2D g2d = (Graphics2D) grp;&lt;br /&gt;
    transform.setToTranslation((rect.width - w) / 2,&lt;br /&gt;
        (rect.height - h) / 2);&lt;br /&gt;
    transform.rotate(Math.toRadians(angle), w / 2,&lt;br /&gt;
        h / 2);&lt;br /&gt;
    g2d.drawImage(image, transform, this);&lt;br /&gt;
  }&lt;br /&gt;
  public void rotate() {&lt;br /&gt;
    angle -= offset;&lt;br /&gt;
    if (angle &amp;lt;= 0) {&lt;br /&gt;
      angle = 360;&lt;br /&gt;
    }&lt;br /&gt;
    repaint();&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Rotation and coordinate translation ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
public class Rotate extends JPanel {&lt;br /&gt;
  public void paint(Graphics g) {&lt;br /&gt;
    super.paint(g);&lt;br /&gt;
    Graphics2D g2d = (Graphics2D) g;&lt;br /&gt;
    g2d.setColor(new Color(150, 150, 150));&lt;br /&gt;
    g2d.fillRect(20, 20, 80, 50);&lt;br /&gt;
    g2d.translate(180, -150);&lt;br /&gt;
    g2d.rotate(Math.PI / 4);&lt;br /&gt;
    g2d.fillRect(20, 20, 80, 50);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame frame = new JFrame(&amp;quot;Rotation&amp;quot;);&lt;br /&gt;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    frame.add(new Rotate());&lt;br /&gt;
    frame.setSize(300, 200);&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Scaling an object ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.geom.AffineTransform;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
public class Scale extends JPanel {&lt;br /&gt;
  public void paint(Graphics g) {&lt;br /&gt;
    super.paint(g);&lt;br /&gt;
    Graphics2D g2d = (Graphics2D) g;&lt;br /&gt;
    g2d.setColor(new Color(150, 150, 150));&lt;br /&gt;
    g2d.fillRect(0, 0, 80, 50);&lt;br /&gt;
    AffineTransform tx1 = new AffineTransform();&lt;br /&gt;
    tx1.translate(110, 20);&lt;br /&gt;
    tx1.scale(0.5, 0.5);&lt;br /&gt;
    g2d.setTransform(tx1);&lt;br /&gt;
    g2d.fillRect(0, 0, 80, 50);&lt;br /&gt;
    AffineTransform tx2 = new AffineTransform();&lt;br /&gt;
    tx2.translate(200, 20);&lt;br /&gt;
    tx2.scale(1.5, 1.5);&lt;br /&gt;
    g2d.setTransform(tx2);&lt;br /&gt;
    g2d.fillRect(0, 0, 80, 50);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame frame = new JFrame(&amp;quot;Scaling&amp;quot;);&lt;br /&gt;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    frame.add(new Scale());&lt;br /&gt;
    frame.setSize(330, 160);&lt;br /&gt;
    frame.setLocationRelativeTo(null);&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Tranformation with AffineTransform.getScaleInstance ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Frame;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.geom.AffineTransform;&lt;br /&gt;
public class AffineTransformGetScaleInstance extends Frame {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    (new AffineTransformGetScaleInstance()).setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  public AffineTransformGetScaleInstance() {&lt;br /&gt;
    setSize(350, 300);&lt;br /&gt;
  }&lt;br /&gt;
  public void paint(Graphics g) {&lt;br /&gt;
    AffineTransform atrans = null;&lt;br /&gt;
    Graphics2D g2d = (Graphics2D) g;&lt;br /&gt;
    atrans = AffineTransform.getScaleInstance(2, 3);&lt;br /&gt;
    if (atrans != null)&lt;br /&gt;
      g2d.setTransform(atrans);&lt;br /&gt;
    g2d.fillRect(50, 50, 100, 50);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Tranformation with AffineTransform.getShearInstance ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Frame;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.geom.AffineTransform;&lt;br /&gt;
public class AffineTransformGetShearInstance extends Frame {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    (new AffineTransformGetShearInstance()).setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  public AffineTransformGetShearInstance() {&lt;br /&gt;
    setSize(350, 300);&lt;br /&gt;
  }&lt;br /&gt;
  public void paint(Graphics g) {&lt;br /&gt;
    AffineTransform atrans = null;&lt;br /&gt;
    Graphics2D g2d = (Graphics2D) g;&lt;br /&gt;
    atrans = AffineTransform.getShearInstance(.1, .5);&lt;br /&gt;
    if (atrans != null)&lt;br /&gt;
      g2d.setTransform(atrans);&lt;br /&gt;
    g2d.fillRect(50, 50, 100, 50);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Tranformation with AffineTransform.getTranslateInstance ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Frame;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.geom.AffineTransform;&lt;br /&gt;
public class AffineTransformGetTranslateInstance extends Frame {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    (new AffineTransformGetTranslateInstance()).setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  public AffineTransformGetTranslateInstance() {&lt;br /&gt;
    setSize(350, 300);&lt;br /&gt;
  }&lt;br /&gt;
  public void paint(Graphics g) {&lt;br /&gt;
    AffineTransform atrans = null;&lt;br /&gt;
    Graphics2D g2d = (Graphics2D) g;&lt;br /&gt;
    atrans = AffineTransform.getTranslateInstance(50, 100);&lt;br /&gt;
    if (atrans != null)&lt;br /&gt;
      g2d.setTransform(atrans);&lt;br /&gt;
    g2d.fillRect(50, 50, 100, 50);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Transform Lab ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Frame;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.geom.AffineTransform;&lt;br /&gt;
public class AffineTransformGetRotateInstance extends Frame {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    (new AffineTransformGetRotateInstance()).setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  public AffineTransformGetRotateInstance() {&lt;br /&gt;
    setSize(350, 300);&lt;br /&gt;
  }&lt;br /&gt;
  public void paint(Graphics g) {&lt;br /&gt;
    AffineTransform atrans = null;&lt;br /&gt;
    Graphics2D g2d = (Graphics2D) g;&lt;br /&gt;
    atrans = AffineTransform.getRotateInstance(Math.PI / 4, 50, 50);&lt;br /&gt;
    if (atrans != null)&lt;br /&gt;
      g2d.setTransform(atrans);&lt;br /&gt;
    g2d.fillRect(50, 50, 100, 50);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Translate and rotate all objects ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.AlphaComposite;&lt;br /&gt;
import java.awt.BasicStroke;&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.Font;&lt;br /&gt;
import java.awt.GradientPaint;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.Image;&lt;br /&gt;
import java.awt.RenderingHints;&lt;br /&gt;
import java.awt.Shape;&lt;br /&gt;
import java.awt.Toolkit;&lt;br /&gt;
import java.awt.event.MouseAdapter;&lt;br /&gt;
import java.awt.event.MouseEvent;&lt;br /&gt;
import java.awt.geom.Ellipse2D;&lt;br /&gt;
import java.awt.geom.RoundRectangle2D;&lt;br /&gt;
import javax.swing.JComponent;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
public class Main extends JComponent {&lt;br /&gt;
  private Image image;&lt;br /&gt;
  private int theta;&lt;br /&gt;
  public Main() {&lt;br /&gt;
    image = Toolkit.getDefaultToolkit().getImage(&amp;quot;A.jpg&amp;quot;);&lt;br /&gt;
    theta = 0;&lt;br /&gt;
    addMouseListener(new MouseAdapter() {&lt;br /&gt;
      public void mousePressed(MouseEvent me) {&lt;br /&gt;
        theta = (theta + 15) % 360;&lt;br /&gt;
        repaint();&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
  public void paint(Graphics g) {&lt;br /&gt;
    Graphics2D g2 = (Graphics2D) g;&lt;br /&gt;
    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);&lt;br /&gt;
    int cx = getSize().width / 2;&lt;br /&gt;
    int cy = getSize().height / 2;&lt;br /&gt;
    g2.translate(cx, cy);&lt;br /&gt;
    g2.rotate(theta * Math.PI / 180);&lt;br /&gt;
    Shape oldClip = g2.getClip();&lt;br /&gt;
    Shape e = new Ellipse2D.Float(-cx, -cy, cx * 2, cy * 2);&lt;br /&gt;
    g2.clip(e);&lt;br /&gt;
    Shape c = new Ellipse2D.Float(-cx, -cy, cx * 3 / 4, cy * 2);&lt;br /&gt;
    g2.setPaint(new GradientPaint(40, 40, Color.blue, 60, 50, Color.white, true));&lt;br /&gt;
    g2.fill(c);&lt;br /&gt;
    g2.setPaint(Color.yellow);&lt;br /&gt;
    g2.fillOval(cx / 4, 0, cx, cy);&lt;br /&gt;
    g2.setClip(oldClip);&lt;br /&gt;
    g2.setFont(new Font(&amp;quot;Times New Roman&amp;quot;, Font.PLAIN, 64));&lt;br /&gt;
    g2.setPaint(new GradientPaint(-cx, 0, Color.red, cx, 0, Color.black, false));&lt;br /&gt;
    g2.drawString(&amp;quot;Hello, 2D!&amp;quot;, -cx * 3 / 4, cy / 4);&lt;br /&gt;
    AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, (float) .75);&lt;br /&gt;
    g2.setComposite(ac);&lt;br /&gt;
    Shape r = new RoundRectangle2D.Float(0, -cy * 3 / 4, cx * 3 / 4, cy * 3 / 4, 20, 20);&lt;br /&gt;
    g2.setStroke(new BasicStroke(4));&lt;br /&gt;
    g2.setPaint(Color.magenta);&lt;br /&gt;
    g2.fill(r);&lt;br /&gt;
    g2.setPaint(Color.green);&lt;br /&gt;
    g2.draw(r);&lt;br /&gt;
    g2.drawImage(image, -cx / 2, -cy / 2, this);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame frame = new JFrame();&lt;br /&gt;
    frame.add(new Main(), BorderLayout.CENTER);&lt;br /&gt;
    frame.setSize(300, 300);&lt;br /&gt;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>