0

私は多かれ少なかれ、ニュートン物理学を使用した非常に単純な惑星重力シミュレーターを完成させました。パンとズームのために惑星を変換およびスケーリングできます。これは、マウス入力などすべて正常に機能します。私が抱えている問題は、何よりも審美的なものです。キャンバスの原点はウィンドウの左上隅 (JPanel 内、JFrame 内) にあるため、すべてがその点を中心にスケーリングされます。原点を画面の中心に設定する方法、または特定のポイントを中心にスケーリングする方法はあるのでしょうか? (ただし、 AffineTransform.scale() には引数として scaleX と scaleY を持つコンストラクターが 1 つしかありません)。キャンバスの境界を負の数として設定しようとしました:

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

(幅と高さは画面サイズです)。

負の数はパネルの座標の外にあるため、これは明らかに機能しません。

それで、これを達成する方法を知っている人はいますか?画面の中心を原点として設定するか、原点ではなく特定の点を中心にスケーリングしますか?

4

1 に答える 1

3

ここでの秘訣は、 のインスタンスを連結することですAffineTransform

  1. 中心が原点になるようにレンダリング全体を移動します。
  2. レンダリングをスケーリングします。
  3. レンダリングの中心 (現在は原点) をビューの中心に戻します。
于 2013-09-02T02:01:17.563 に答える