Как нарисовать круг с заданными координатами X и Y в качестве средней точки круга?

Я начал применение радиосвязи для обнаруживать местонахождение прочности сигнала от башен. Я использовал Java swing, и у меня возникла проблема при рисовании круга вокруг заданной точки местоположения башни передатчика мобильного сигнала. Я уже рассчитал координаты X, Y, а также значение радиуса.

пожалуйста, найдите ниже код, который я использовал для рисования круга, и у него возникли проблемы.

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

проблема в том, что он создает круг, но он не принимал координаты X и Y в качестве центральной точки. Он взял координаты X и Y в качестве верхней левой точки круга.

может ли кто-нибудь помочь мне нарисовать круг, имея заданные координаты X и Y в качестве центральной точки круга.

8 ответов


на 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


Итак, мы все делаем одну и ту же домашнюю работу?

странно, как самый проголосовавший ответ неправильный. Помните, что 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); 

}

замените линию ничьей на

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

Это должно сделать верхнюю левую часть вашего круга в правильном месте, чтобы сделать центр (X,Y), по крайней мере, до тех пор, пока точка (X - r,Y - r) имеет оба компонента в диапазоне.


JPanel pnlCircle = new JPanel() {
        public void paintComponent(Graphics g) {
            int X=100;
            int Y=100;
            int d=200;
            g.drawOval(X, Y, d, d);
        }
};

вы можете изменить координаты X,Y и радиус, что вы хотите.


drawCircle(int X, int Y, int Radius, ColorFill, Graphics gObj) 

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

}

оба ответа неверны. следует читать:

x-=r;
y-=r;


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

единственное, что сработало для меня:

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