2014-11-04 2 views
2

버튼이있는 데모 클래스가 있고 사용자가 다각형이라고 불리는 버튼을 클릭하면 다각형이 그려진 지점에서부터 그려집니다. 코드가 도면에서 잘 작동합니다. 불행히도 다각형을 잘못된 위치에 그립니다.5 점 다각형의 점을 계산하는 방법

PolygonShape 클래스

class PolygonShape { 

    int x, y; 
    private Polygon p; 

    public PolygonShape(int x, int y) { 
    // the x, y sent to this constructor 
    //are the cordinates of the point where the user clicked 
    this.x = x; 
    this.y = y;  
    } 

    public void draw(Graphics g) {  
    p = new Polygon(); 
    for (int i = 0; i < 5; i++) 
     p.addPoint((int) (x + y * Math.cos(i * 2 * Math.PI/5)), 
      (int) (x + y * Math.sin(i * 2 * Math.PI/5))); 
    g.drawPolygon(p);  
    } 
} 
+0

다각형을 그리거나 다각형이 잘못된 장소에 있다는 것을 의미합니까? –

+0

다각형을 잘못된 위치에 그립니다. – name

+1

그리기 방법의 p.addPoint 매개 변수가 정말 이상하게 보입니다. x와 y 모두 변수 x + (y * random)를 취합니다. 나는 그게 무슨 뜻인지 완전히 모르겠지만, 그것이 맞는지 확신합니까? –

답변

4

x 가정 및 y 다각형의 중심이며, 당신이 그들을 잘못 사용하고 (당신은에 x를 추가 할 필요가 x 좌표와 Y에 y 좌표)과 반경이 다른 중요한 변수 인 r이 누락되었습니다. y을 곱하는 대신 수식에 r을 곱하면됩니다. 즉

:

class PolygonShape { 

    int x, y, r; 
    private Polygon p; 

    public PolygonShape(int x, int y, int r) { 
     this.x = x; 
     this.y = y; 
     this.r = r;  
    } 

    // Provide a default radius of 100 pixels if no radius is given. 
    public PolygonShape(int x, int y) { 
     this(x, y, 100); 
    } 

    public void draw(Graphics g) {  
     p = new Polygon(); 
     for (int i = 0; i < 5; i++) { 
      double angle = i * 2 * Math.PI/5; 
      p.addPoint((int) (x + r * Math.cos(angle)), 
         (int) (y + r * Math.sin(angle))); 
     } 
     g.drawPolygon(p); 
    } 
} 
+0

고마워요 : D – name

0

또 다른 옵션은 그리기 전에 그래픽에 번역을 설정하는 것입니다 :

final Graphics2D g2 = (Graphics2D)g.create(); 
g2.translate(x, y); 
g2.drawPolygon(p); 

당신은 -x, -y을 수행해야 할 수 있습니다, 당신은 그것을 시도해야합니다.

번역본을 영구적으로 사용할 수 없도록 새 그래픽 객체 (g2) 작업 중입니다.

장점은 동일한 모양을 여러 곳에서 그릴 수 있으며, 단지 xy입니다.

관련 문제