如何绘制一个给定X和Y坐标作为圆的中间点的圆?

нαƒ*_*єєz 22 java swing java-2d jpanel paintcomponent

我开发了一种用于定位塔架信号强度的电信应用.我使用了java swing,当我在移动信号发射塔位置的给定点周围绘制圆圈时遇到问题.我已经计算了X,Y坐标和半径值.

请找到我用来绘制圆圈的下面的代码,它有问题.

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

问题是,它创建了圆圈,但没有将X和Y坐标作为中心点.将X和Y坐标作为圆的左上角.

任何人都可以通过将给定的X和Y坐标作为圆的中心点来帮助我绘制圆.

ary*_*naq 38

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);
}
Run Code Online (Sandbox Code Playgroud)

这将绘制一个圆心,中心位于 x,y

  • 注意到OP的+1是使用`r`(半径)作为伪`d'(直径).参数在文档中标记为"w"和"h". (8认同)

小智 8

所以我们都在做同样的家庭工作?

奇怪的是,最多投票的答案是错误的.请记住,draw/fillOval将高度和宽度作为参数,而不是半径.因此,要使用用户提供的x,y和radius值正确绘制和居中,您可以执行以下操作:

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); 

}
Run Code Online (Sandbox Code Playgroud)


qap*_*hla 6

用.替换你的画线

g.drawOval(X - r, Y - r, r, r)
Run Code Online (Sandbox Code Playgroud)

这应该使得圆圈的左上角成为制作中心的正确位置(X,Y),至少只要该点(X - r,Y - r)具有两个范围内的组件.