旋转形状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不失其原点
我的意思是我想旋转它的原点而不滑动
答
首先,小费。而不是gr.transform(blablabla);
我想你可以使用gr.rotate(angle);
。
我不知道你正是在这里做什么,而是要做到点周围旋转的通常的方法是:
- 由该点的x和y(不知道正面或负面的翻译。 ..try两者)
- 旋转
- 翻译回
答
当你做这样的事情,你要记住,你是从未移动的这是绘制的东西。可以这么说,你只是在移动油漆刷。
你会做通常沿着这些路线的东西:
- 翻译图纸原点,你要画的点。
- 将画笔旋转到您想要绘制的角度。
- 绘制对象。
- 反转旧的转换,以便将来的对象不受影响。
我不能,但是,请记住正确的顺序做翻译和旋转。(任何的评论了吗?)
答
要通过具体的原点使用
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 ]
我真的不明白你想要做什么...... 你想通过平面轴的原点或旋转形状的起源?? – 2009-11-26 12:17:58