2013-09-01 1 views
0

나는 뉴턴 물리학을 사용하여 매우 단순한 행성 중력 시뮬레이터를 완성합니다. 행성을 팬 및 줌에 맞게 변형 및 확장 할 수 있습니다. 이것은 잘 작동하고, 마우스 입력과 모든 것. 내가 가진 문제는 다른 어떤 것보다 더 미학적이다. 캔버스의 원점은 윈도우의 왼쪽 위 모서리 (JPanel 내, JFrame 내)에 있으므로 모든 점이 해당 점에 대해 비례합니다. 원점을 화면 중심으로 설정하거나 특정 지점에 대해 비율을 조정할 수있는 방법이 있는지 궁금합니다. AffineTransform.scale()이 하나의 생성자 만 가지고 있으며 scaleX와 scaleY를 args로 가진다. 캔버스의 경계를 다음과 같이 음수로 설정해 보았습니다.Java - 특정 점에 대한 캔버스 크기 조정

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

(너비와 높이가 화면 크기 임).

음수는 패널의 좌표 밖에 있으므로 분명히 작동하지 않습니다.

아무도이를 수행하는 방법을 알고 있습니까? 화면의 중심을 원점으로 설정하거나 원점이 아닌 특정 점을 기준으로 비율을 조정 하시겠습니까?

답변

3

여기서 트릭은 AffineTransform의 인스턴스를 연결하는 것입니다.

  1. 중심이 원점에 오도록 전체 렌더링을 이동합니다.
  2. 렌더링 크기를 조정하십시오.
  3. 렌더링의 중심 (이제 원점에 있음)을 뷰의 중심으로 다시 이동하십시오.