2017-04-02 58 views
0

我使用graphics2D在java中创建了一个矩形,我想在原点(0,0)的所有轴,Ox,Oy和Oz上旋转它。怎么做 ?如何在Java中的Ox,Oy和Oz轴上旋转此矩形?

因为它是2D,z = 0所以你能帮我把这个矩形旋转到所有的轴上吗?

谢谢!

这是我的代码,我创建了一个矩形,我想将它保存为图像。

import java.awt.Canvas; 
import java.awt.Color; 
import java.awt.Frame; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent; 
import java.awt.image.BufferedImage; 
import java.io.File; 

import javax.imageio.ImageIO; 

public class DrawShape_SaveAsImage extends Canvas { 

    public static void main(String[] args) { 
     Frame f=new Frame("Draw shape and text on Canvas"); 
     final Canvas canvas=new DrawShape_SaveAsImage(); 

     f.add(canvas); 

     f.setSize(600,600); 
     f.setVisible(true); 
     f.addWindowListener(new WindowAdapter() { 
      public void windowClosing(WindowEvent event) { 
       saveCanvas(canvas); 
       System.exit(0); 
      } 
     }); 

    } 

    public void paint(Graphics g) { 
     Graphics2D g2=(Graphics2D)g; 
     g2.setBackground(Color.WHITE); 
     g2.clearRect(0, 0, this.getWidth(), this.getHeight()); 
     g2.setColor(Color.BLACK); 
     g2.fillRect(100, 100, 200, 200); 
    } 

    public static void saveCanvas(Canvas canvas) { 

     BufferedImage image=new BufferedImage(canvas.getWidth(), canvas.getHeight(),BufferedImage.TYPE_INT_RGB); 

     Graphics2D g2=(Graphics2D)image.getGraphics(); 


     canvas.paint(g2); 
     try { 
      ImageIO.write(image, "png", new File("canvas.png")); 
     } catch (Exception e) { 

     } 
    } 
} 

回答

0

这是2D的,所以你只能围绕OZ旋转。首先,你应该使用矢量的任何坐标(它使数学容易;))在这里你有Vector类和旋转的例子。您可以通过我这里检查演示编码:http://ideone.com/ZZjm6l

import java.util.*; 
import java.lang.*; 
import java.io.*; 
import static java.lang.Math.*; 
class Vector 
{ 
    double x; 
    double y; 

    Vector(double a, double b) 
    { 
     x = a; 
     y = b; 
    } 

    void add(Vector v) 
    { 
     x += v.x; 
     y += v.y; 
    } 


    //other useful methods like multiply should be here 

    void rotate(double angle) //https://en.wikipedia.org/wiki/Rotation_(mathematics) 
    { 
     double s = sin(angle); 
     double c = cos(angle); 

     x = x * c - y * s; 
     y = x * s + y * c; 
    } 

} 




class Main 
{ 
    public static void main (String[] args) throws java.lang.Exception 
    { 
     Vector v = new Vector(1,1); 
     v.rotate(Math.PI/2); 
     System.out.println(v.x + " " + v.y); 
    } 
} 

所以你fillRect应该是这样的毕竟:

g2.fillRect(v.x, v.y, 200, 200); 

祝你好运!