2012-07-18 2 views
1

현재 g2d 객체에 회전을 적용하면 회전하지 않고 같은 위치 (다른 객체의 위에있는 내 컨텍스트)에서 렌더링합니다. 내가 rotate 메소드에 대해 이해하고있는 바에 따르면, 현재 그래픽 컨텍스트에 변환을 적용하여 그 뒤의 렌더링의 픽셀을 변환합니다 (이것이 잘못 될 수 있음). 여기에 문제의 코드입니다 :Java rotate issue

@Override 
    public void paint(final Graphics graphics) { 
    super.paint(graphics); 
    final Graphics2D g2d = (Graphics2D) graphics; 
    .... 
    .... 
    g2d.setColor(Color.RED); 
    g2d.setStroke(new BasicStroke(SMALL_LINE_THICKNESS)); 
    if (isLattice1Drawn) { 
     g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1)); 
     // lattice1 and lattice2 are Polygon objects 
     g2d.draw(lattice1); 
     // This fades in the second Polygon over the first 
     g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha)); 
     // This line should rotate it, but doesn't 
     g2d.rotate(Math.toRadians(210)); 
     g2d.draw(lattice2); 
     ..... 

감사합니다, 마이크

편집 한 제프의 제안으로, 나는 다음과 같은 코드로 날 떠나, 단지 회전 가진 페인트로 그리기 시도 :

@Override 
public void paint(final Graphics graphics) { 
    super.paint(graphics); 
    final Graphics2D g2d = (Graphics2D) graphics; 
    g2d.rotate(Math.toRadians(210)); 
    g2d.draw(lattice2); 
    return; 
    // Rest of paint ................. 

불행히도 이것은 도움이되지 않았으며, 다른 제안이 가장 환영받을 것입니다.

편집 2 : 회전을 호출하지 않으면 폴리곤이 렌더링되지만 아무 일도 일어나지 않습니다. 아무도 이것을 설명 할 수 있습니까?

+0

: 원하는 작업이 질량 중심 주위에 다각형을 회전하는 경우

다음, 대신 다음 Graphics2D의 메소드를 사용합니다. 격자가 뭐야? 그게 당신이 만든 무언가입니까? – jeff

+0

@jeff lattice1과 lattice2는 java.awt.Polygon의 인스턴스입니다. 특별한 것은 없습니다 :) – mikeythemissile

+0

저는 손실이 있습니다 - 회전을 사용하여 lattice2를 페인트 메서드에 떨어 뜨리면 어떨까요? – jeff

답변

3

내가 이해하는 것 편집 2 : 회전이 실제로 작동합니다. 그러나 회전이 원점을 기준으로하기 때문에 폴리곤의 회전 좌표는 가시 영역 외부에서 끝납니다. 작은 각도로 회전하여이를 테스트 할 수 있습니다. 난 당신이 회전 후 픽셀을 변형에 대한 올바른 생각

void rotate(double theta, double x, double y) 
+0

나는 그것이 일어나는 것을 생각합니다. 이전 코멘트에서 말한 것처럼 원점을 변환 할 수도 있지만, 더 잘 알려진 회전 버전이 더 좋다고 생각합니다. 나는 그것을 잊어 버렸다 : S – davidbuzatto

+0

그게 무슨 일 이니, 내가 그렇게하지 않았다는 것을 믿을 수 없다 : S 도움을 많이 주셔서 감사합니다. D – mikeythemissile