2013-10-15 3 views
18

저는 타워에서 신호 강도를 찾기위한 통신 애플리케이션을 개발했습니다. 나는 자바 스윙을 사용했고, 모바일 신호 송신기 타워 위치의 주어진 지점을 중심으로 원을 그릴 때 문제가 발생했습니다. 이미 X, Y 좌표와 반지름 값을 계산했습니다.주어진 X 및 Y 좌표를 원의 중간 지점으로 사용하여 원을 그리는 방법은 무엇입니까?

원을 그리기 위해 사용했던 아래 코드는 문제가 있습니다.

JPanel panelBgImg = new JPanel() { 
    public void paintComponent(Graphics g) { 
     g.drawOval(X, Y, r, r); 
    } 
} 

문제는 원을 만들지 만 X 좌표와 Y 좌표를 중심점으로 사용하지 않았습니다. X와 Y 좌표를 원의 왼쪽 상단 점으로 취했습니다.

아무도 주어진 X 및 Y 좌표를 원의 중심점으로 사용하여 원을 그리는 데 도움을 줄 수 있습니까?

답변

33

fillOval은 타원형의 타원형으로, with width=r, height = r은 원을 갖습니다. fillOval(x,y,r,r)에 가운데가 (x, y) 인 원을 그리려면 너비의 절반과 높이의 절반만큼 직사각형을 이동해야합니다.

public void drawCenteredCircle(Graphics2D g, int x, int y, int r) { 
    x = x-(r/2); 
    y = y-(r/2); 
    g.fillOval(x,y,r,r); 
} 

두 답변이 잘못이다 x,y

+7

+1에 동의합니다. 매개 변수는 문서에서'w'와'h'로 표시됩니다. –

6

이가해야

g.drawOval(X - r, Y - r, r, r) 

와 무승부 라인을 교체 왼쪽 상단 중심이 (X,Y) 할 수있는 권리 장소 당신의 원의, 적어도 한 점 (X - r,Y - r) 범위에서 모두 구성 요소가로 .

+1

나는 심지어 리면이 경우 작동 확신 왼쪽 구석이 범위를 벗어났습니다. – Cruncher

+0

나는 화면에서 그림을 그려 본 적이 없으므로 그 말을 듣겠습니다. 그러나 코너가 범위 내에 있다면 확실히 작동합니다. – qaphla

+0

OP가 'd'(지름)로 'r'(반경)을 사용하고 있음을 알리는 @Cruncher –

0

에서 센터와 원을 그릴 것입니다. 읽어야 나를 위해 일한

x-=r; 
y-=r; 


drawOval(x,y,r*2,r*2); 
0

유일한 :

g.drawOval((getWidth()-200)/2,(getHeight()-200)/2, 200, 200);  
7

그래서 우리 모두가 같은 집에 일을하고 있습니까?

가장 득표 한 대답이 어떻게 잘못 되었습니까? draw/fillOval은 반경이 아닌 매개 변수로 높이와 너비를 사용합니다. 그래서 제대로 그려 사용자가 제공하는 X, Y와 원의 중심과 반지름 값은 당신은 이런 식으로 뭔가를 할 것이라고합니다 :

public static void drawCircle(Graphics g, int x, int y, int radius) { 

    int diameter = radius * 2; 

    //shift x and y by the radius of the circle in order to correctly center it 
    g.fillOval(x - radius, y - radius, diameter, diameter); 

} 
2
drawCircle(int X, int Y, int Radius, ColorFill, Graphics gObj) 
+4

스택 오버플로에 오신 것을 환영합니다! 나는 당신을 추천한다. [둘러보기] (http://stackoverflow.com/tour). 답변을 주실 때 [답변에 대한 설명] (http://stackoverflow.com/help/how-to-answer)이 가장 바람직합니다. –

0
import java.awt.Color; 
import java.awt.Graphics2D; 
import java.awt.Graphics; 
import javax.swing.JFrame; 

public class Graphiic 
{ 
    public Graphics GClass; 
    public Graphics2D G2D; 
    public void Draw_Circle(JFrame jf,int radius , int xLocation, int yLocation) 
    { 
     GClass = jf.getGraphics(); 
     GClass.setPaintMode(); 
     GClass.setColor(Color.MAGENTA); 
     GClass.fillArc(xLocation, yLocation, radius, radius, 0, 360); 
     GClass.drawLine(100, 100, 200, 200);  
    } 

} 
관련 문제