Home  >  Article  >  Java  >  How to Rotate and Scale a 2D Shape Around the X-Axis in Java?

How to Rotate and Scale a 2D Shape Around the X-Axis in Java?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-28 00:03:29940browse

How to Rotate and Scale a 2D Shape Around the X-Axis in Java?

Rotating a Shape Vertically Around the X-Axis with Scaling

Problem:

You have a 2D graph with an x and y axis and want to rotate a shape around an axis while incorporating a scaling function.

Solution:

To achieve this, you can manipulate the shape's points using transformations such as rotation and scaling. Here's an example that first rotates the shape by a fixed angle and then scales it by a varying scale factor:

<code class="java">import java.awt.*;
import java.awt.event.*;
import java.awt.geom.AffineTransform;
import javax.swing.*;

public class ShapeRotationScaling extends JPanel implements ActionListener {

    private static final int ANGLE_INCREMENT = 1; // in degrees
    private static final double SCALE_INCREMENT = 0.1;
    private int[] shapeXPoints = {200, 200, 240, 240, 220, 220, 200};
    private int[] shapeYPoints = {200, 260, 260, 240, 240, 200, 200};
    private AffineTransform transform = new AffineTransform();
    private double rotationAngle = 0;
    private double scaleFactor = 1;
    private Timer timer = new Timer(100, this);

    public ShapeRotationScaling() {
        this.setPreferredSize(new Dimension(700, 700));
        this.setBackground(Color.white);
        timer.start();
    }

    @Override
    public void actionPerformed(ActionEvent event) {
        // Rotate the shape around the x-axis
        transform.rotate(Math.toRadians(rotationAngle), this.getWidth() / 2, 0);

        // Scale the shape
        transform.scale(scaleFactor, scaleFactor);

        // Increment the rotation angle and scale factor
        rotationAngle += ANGLE_INCREMENT;
        scaleFactor += SCALE_INCREMENT;

        repaint();
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

        // Draw the x and y axes
        g2d.drawLine(this.getWidth() / 2, 0, this.getWidth() / 2, this.getHeight());
        g2d.drawLine(0, this.getHeight() / 2, this.getWidth(), this.getHeight() / 2);

        // Apply the transformation to the shape and draw it
        Shape rotatedAndScaledShape = transform.createTransformedShape(new Polygon(shapeXPoints, shapeYPoints, shapeXPoints.length));
        g2d.draw(rotatedAndScaledShape);
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame("Shape Rotation and Scaling");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ShapeRotationScaling sr = new ShapeRotationScaling();
        frame.add(sr);
        frame.pack();
        frame.setVisible(true);
    }
}</code>

The above is the detailed content of How to Rotate and Scale a 2D Shape Around the X-Axis in Java?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn