Search code examples
javauser-interfacegraphicsawtcomputational-geometry

How to rotate a line based on a given number of degrees


I have a line drawn with a Graphics object. I want to rotate this line a certain amount of degrees based on how much the mouse is dragged. I can get the number of degrees i need to rotate it but how do i then rotate the line based on that?

Thank You!


Solution

  • You can create a Line2D object for your original line. Then you can use AffineTransform#getRotateInstance to obtain an AffineTransform that does the rotation about a certain angle, around a certain point. Using this AffineTransform, you can create a rotated Line2D object to paint. So your painting code could roughly look like this:

    protected void paintComponent(Graphics gr) {
        super.paintComponent(gr);
        Graphics2D g = (Graphics2D)gr; 
    
        // Create the original line, starting at the origin,
        // and extending along the x-axis
        Line2D line = new Line2D.Double(0,0,100,0);
    
        // Obtain an AffineTransform that describes a rotation
        // about a certain angle (given in radians!), around
        // the start point of the line. (Here, this is the
        // origin, so this could be simplified. But in this
        // form, it's more generic)
        AffineTransform at = 
            AffineTransform.getRotateInstance(
                Math.toRadians(angleInDegrees), line.getX1(), line.getY1());
    
        // Draw the rotated line
        g.draw(at.createTransformedShape(line));
    }