旋转形状java2d而不失其原点

时间:2009-11-26 11:33:34

标签: java swing graphics drawing

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);
}

但是如果我想在原始图像原点绘制旋转的形状怎么办。

我的意思是我想在不滑动的情况下旋转其原点

3 个答案:

答案 0 :(得分:2)

通过特定原点使用

来旋转图像
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   ]

答案 1 :(得分:0)

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

我不确定你在这里做了什么,但通常的方法来完成一个点的旋转:

  • 通过该点的x和y进行翻译(不确定是正面还是负面...尝试两者)
  • 旋转
  • 翻译

答案 2 :(得分:0)

当你做这种事情时,你必须记住,你从不移动任何被绘制的东西。您只是移动画笔,可以这么说。

您通常会沿着这些方向做点什么:

  1. 将绘图原点转换为您想要绘制的点。
  2. 将画笔旋转到要绘制的角度。
  3. 绘制对象。
  4. 撤消旧的转换,以便将来的对象不受影响。
  5. 但是,我不能记住正确的顺序来翻译和旋转。(任何评论都在那里?)