旋转形状java2d不失其原点

问题描述:

protected void paintComponent(Graphics g) { 
    Graphics2D gr = (Graphics2D) g.create(); 
    // draw Original image 
    super.paintComponent(gr); 

    // draw 45 degree rotated instance 
    int aci=-45; 
    gr.transform(AffineTransform.getRotateInstance(Math.toRadians(aci))); 
    super.paintComponent(gr); 

    //translate rotated instance from origin to +10 on y axes 
    gr.translate(0,10); 
    super.paintComponent(gr); 
} 

但是,如果我想在原始图像原点绘制旋转的形状怎么办?旋转形状java2d不失其原点

我的意思是我想旋转它的原点而不滑动

+0

我真的不明白你想要做什么...... 你想通过平面轴的原点或旋转形状的起源?? – 2009-11-26 12:17:58

首先,小费。而不是gr.transform(blablabla);我想你可以使用gr.rotate(angle);

我不知道你正是在这里做什么,而是要做到点周围旋转的通常的方法是:

  • 由该点的x和y(不知道正面或负面的翻译。 ..try两者)
  • 旋转
  • 翻译回
+0

我认为他们做同样的工作不他们? – soField 2009-11-26 11:41:05

+0

是的,他们是我测试 – soField 2009-11-26 11:43:35

+0

如果他想旋转对象的原点,他不需要做两个翻译,但;他只需要做那些,如果他想围绕任意点旋转(这仍然是很好的信息)。 – jprete 2009-11-26 12:29:29

当你做这样的事情,你要记住,你是从未移动的这是绘制的东西。可以这么说,你只是在移动油漆刷

你会做通常沿着这些路线的东西:

  1. 翻译图纸原点,你要画的点。
  2. 将画笔旋转到您想要绘制的角度。
  3. 绘制对象。
  4. 反转旧的转换,以便将来的对象不受影响。

我不能,但是,请记住正确的顺序做翻译和旋转。(任何的评论了吗?)

要通过具体的原点使用

x2 = cos(angle)*(x1 - x0) -sin(angle)*(y1 - y0) + x0 

y2 = sin(angle)*(x1 - x0) + cos(angle)*(y1 - y0) + y0 
图像旋转

其中(x0,y0)是您想要的原点。

要做到这一点更容易只需使用矩阵符号

[x2 [cos -sin x0 [x1 - x0 
    y2 = sin cos y0 y1 - y0 
    1]  0 0 1]  1 ]