2014-02-13 2 views
2

원의 둘레를 따라이 작은 직사각형을 이동하여 캐논처럼 보이고 움직 이도록하고 싶습니다.자바 스윙에서 원호를 중심으로 회전

enter image description here

코드

private void doDrawing(Graphics g){ 
    g.setColor(Color.BLUE); 
    g.fillArc(-CANON_RADIUS/2, this.getHeight()-CANON_RADIUS/2, CANON_RADIUS, CANON_RADIUS, 0, 90); 
    Graphics2D g2d = (Graphics2D) g; 
    g2d.setColor(Color.BLUE); 
    Rectangle rect = new Rectangle(CANON_RADIUS/2, this.getHeight()-CANON_RADIUS/2, CANON_WIDTH, CANON_HEIGHT); 
    AffineTransform transform = new AffineTransform(); 
    transform.rotate(Math.toRadians(-60), rect.getX() + rect.width/2, rect.getY() + rect.height/2); 
    Shape transformed = transform.createTransformedShape(rect); 
    g2d.fill(transformed); 
} 

이 코드는 그 중심에 대해 사각형을 회전합니다. 원주를 중심으로 사각형을 어떻게 회전시킬 수 있습니까? 이미 사용하고있는 것처럼

+0

도 코드의 나머지 부분을 표시, 그래서 우리는 당신을 도울 수 있습니다. 나는 네가 가진 것을 생각하면 충분하지 않을 수도 있다고 생각한다. –

답변

1

것부터 먼저, 당신은 이것에 대한 변환 행렬을 사용할 수 있습니다 http://en.wikipedia.org/wiki/Transformation_matrix

편집 : 당신의 코드를 찾고, 당신은 앵커의 주위에 당신의 캐논을 회전합니다. JavaDoc을보고하십시오 : http://docs.oracle.com/javase/7/docs/api/java/awt/geom/AffineTransform.html

공공 무효 회전 (더블 세타, 더블 anchorx, 더블 anchory)

첫 번째 인수가 당신의 회전이다, 마지막 두 개의 인수가 될 필요 네 대포의 중간에! 예를 들어 0과 0을 입력하면됩니다.

두 번째 방법은 회전 된 사각형의 가운데를베이스 반경으로 움직일 수 있습니다. (의사)와 같은

:

Point p = circle.getPoint(); 
shape.moveto(p.x-(shape.width/2),p.y-(shape.height/2)); 
g2d.fill(shape); 
+0

고마워요! 이것은 효과가있다! –

+0

게임에 대한 여러분의 행운을 환영합니다! – Kostronor