web-dev-qa-db-fra.com

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

J'ai développé une application de télécommunication permettant de localiser la force des signaux des tours. J'ai utilisé Java Swing et je ne parviens pas à dessiner le cercle autour du point de la tour émettrice du signal mobile. J'ai déjà calculé les coordonnées X, Y ainsi que la valeur du rayon. 

S'il vous plaît 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 que cela crée un cercle, mais il n’a pas pris les coordonnées X et Y comme point central. Il a pris les coordonnées X et Y comme point haut gauche du cercle. 

Est-ce que quelqu'un pourrait m'aider à dessiner le cercle en ayant les coordonnées X et Y données comme point central du cercle?.

21
нαƒєєz

La fillOval correspond à un ovale dans 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 va tracer un cercle avec le centre à x,y

37
arynaq

Nous faisons donc tous le même travail à domicile?

Etrange comment la réponse la plus votée est fausse. Rappelez-vous que draw/fillOval prend hauteur et largeur en tant que paramètres et non en rayon. Donc, pour dessiner et centrer correctement un cercle avec les valeurs x, y et radius fournies par l'utilisateur, procédez comme suit:

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
Justin

Remplacez votre ligne de tirage par

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

Cela devrait faire du coin supérieur 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
qaphla
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.

4
Udeesha Induwara
drawCircle(int X, int Y, int Radius, ColorFill, Graphics gObj) 
3
Andres Mitchell
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
Farhad

Cela dessine un arc avec le centre dans le rectangle spécifié. Vous pouvez dessiner, demi-cercles, quarts de cercle, etc.

g.drawArc(x - r, y - r, r * 2, r * 2, 0, 360)
1
anydoby

La seule chose qui a fonctionné pour moi:

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

les deux réponses sont est incorrect. il devrait se lire:

x-=r;
y-=r;


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