Comment dessiner un cercle avec des coordonnées X et Y données comme point central du cercle?


J'ai développé une application de télécommunication pour localiser les forces du signal des tours. J'ai utilisé java swing et j'ai un problème lors du dessin du cercle autour du point donné de l'emplacement de la tour de l'émetteur de signal mobile. J'ai déjà calculé les coordonnées X, Y et aussi la valeur du rayon.

Veuillez trouver le code ci-dessous que j'ai utilisé pour dessiner le cercle et il a des problèmes.

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

Le problème est, il crée le cercle, mais il n'a pas pris la Coordonnées X et Y comme point central. Il a pris les coordonnées X et Y comme point supérieur gauche du cercle.

Quelqu'un Pourrait-il m'aider à tracer le cercle en ayant les coordonnées X et Y comme le centre du cercle.

Author: mKorbel, 2013-10-15

8 answers

Le fillOval correspond à la forme d'un ovale à l'intérieur d'un rectangle, with width=r, height = r, vous obtenez un cercle. Si vous voulez que fillOval(x,y,r,r) dessine un cercle avec le centre à (x,y), vous devrez déplacer le rectangle de la moitié de sa largeur et de la moitié de sa hauteur.

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

Cela dessinera un cercle avec le centre à x,y

 35
Author: arynaq, 2013-10-15 17:50:30

Donc nous faisons tous le même travail à domicile?

Étrange comment la réponse la plus votée est fausse. Rappelez-vous, draw / fillOval prendre la hauteur et la largeur comme paramètres, pas le rayon. Donc, pour dessiner et centrer correctement un cercle avec les valeurs x, y et radius fournies par l'utilisateur, vous feriez quelque chose comme ceci:

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

}
 8
Author: Justin, 2015-03-02 10:02:28

Remplacez votre ligne de tirage par

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

Cela devrait faire du haut à gauche de votre cercle le bon endroit pour que le centre soit (X,Y), au moins tant que le point (X - r,Y - r) a les deux composants dans la plage.

 6
Author: qaphla, 2013-10-15 17:10:08
JPanel pnlCircle = new JPanel() {
        public void paintComponent(Graphics g) {
            int X=100;
            int Y=100;
            int d=200;
            g.drawOval(X, Y, d, d);
        }
};

Vous pouvez changer les coordonnées X,Y et le rayon de ce que vous voulez.

 3
Author: Udeesha Induwara, 2018-03-22 15:07:39
drawCircle(int X, int Y, int Radius, ColorFill, Graphics gObj) 
 2
Author: Andres Mitchell, 2017-03-30 23:22:06
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);    
    }

}
 1
Author: Farhad, 2017-11-06 20:30:26

Les deux réponses sont incorrectes. il devrait se lire comme suit:

x-=r;
y-=r;


drawOval(x,y,r*2,r*2);
 0
Author: johnny, 2014-11-18 12:27:13

La seule chose qui a fonctionné pour moi:

g.drawOval((getWidth()-200)/2,(getHeight()-200)/2, 200, 200);    
 0
Author: Kordian, 2014-12-10 12:08:28