0

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

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

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

这显然不起作用,因为负数超出了面板的坐标。

那么有谁知道如何做到这一点?将屏幕的中心设置为原点还是围绕特定点而不是原点缩放?

4

1 回答 1

3

这里的技巧是连接AffineTransform.

  1. 移动整个渲染,使中心位于原点。
  2. 缩放渲染。
  3. 将渲染的中心(现在在原点)移回视图的中心。
于 2013-09-02T02:01:17.563 回答