Java - 缩放关于特定点的画布

时间:2013-09-01 16:58:51

标签: java awt scale affinetransform java-canvas

我或多或少使用牛顿物理学完成了一个非常简单的行星引力模拟器。它可以变换和缩放行星以进行平移和缩放。这工作正常,鼠标输入和一切。我遇到的问题比其他任何问题都更美观。由于画布的原点位于窗口的左上角(在JPanel内,在JFrame内),因此所有内容都会缩放。我想知道有没有办法将原点设置到屏幕的中心,或者缩放特定点? (尽管AffineTransform.scale()只有一个构造函数,其中scaleX和scaleY作为args)。我已经尝试将画布的边界设置为负数:

canvas.setBounds(-width/2, -height/2, width/2, height/2);

(宽度和高度是屏幕尺寸)。

这显然不起作用,因为负数超出了小组的合作范围。

所以有人知道要做到这一点吗?是将屏幕中心设置为原点还是缩放特定点而不是原点?

1 个答案:

答案 0 :(得分:3)

这里的技巧是连接AffineTransform

的实例
  1. 移动整个渲染,使中心位于原点。
  2. 缩放渲染。
  3. 将渲染中心(现在位于原点)移回视图中心。