Как нарисовать круг с заданными координатами 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 и радиус, что вы хотите.
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);
}
}