it-swarm.com.de

Wie zeichnet man einen Kreis mit gegebenen X- und Y-Koordinaten als Mittelpunkt des Kreises?

Ich habe eine Telekommunikationsanwendung entwickelt, um Signalstärken von den Türmen zu lokalisieren. Ich habe Java-Swing verwendet, und ich habe ein Problem, wenn ich den Kreis um den angegebenen Punkt des Standorts des mobilen Signalsenders zeichnete. Ich habe bereits die X-, Y-Koordinaten und auch den Radiuswert berechnet. 

Hier finden Sie den Code, mit dem ich den Kreis gezeichnet habe, und es gibt Probleme.

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

Das Problem ist, dass der Kreis erstellt wird, aber die X- und Y-Koordinaten nicht als Mittelpunkt verwendet wurden. Die X- und Y-Koordinaten wurden als oberer linker Punkt des Kreises verwendet. 

Könnte mir bitte jemand helfen, den Kreis zu zeichnen, indem er die angegebenen X- und Y-Koordinaten als Mittelpunkt des Kreises hat.

21
нαƒєєz

Die fillOval passt zu einem Oval innerhalb eines Rechtecks, with width=r, height = r Sie erhalten einen Kreis . Wenn Sie möchten, dass fillOval(x,y,r,r) einen Kreis mit dem Mittelpunkt (x, y) zeichnet, müssen Sie das Rechteck um die Hälfte und die Hälfte der Höhe verschieben .

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

Dadurch wird ein Kreis mit dem Mittelpunkt bei x,y gezeichnet.

37
arynaq

Also machen wir alle die gleiche Heimarbeit?

Merkwürdig, wie die am meisten gewählte Antwort falsch ist. Denken Sie daran, dass draw/fillOval die Höhe und Breite als Parameter verwendet, nicht den Radius. Um einen Kreis mit vom Benutzer angegebenen X-, Y- und Radius-Werten korrekt zu zeichnen und zu zentrieren, würden Sie Folgendes tun:

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

Ersetzen Sie Ihre Zuglinie durch

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

Dies sollte die obere linke Ecke Ihres Kreises zur rechten Stelle machen, damit die Mitte (X,Y), Mindestens solange der Punkt (X - r,Y - r) beide Komponenten im Bereich hat.

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

sie können die X-, Y-Koordinaten und den Radius beliebig ändern.

4
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

Dies zeichnet einen Bogen mit der Mitte im angegebenen Rechteck. Sie können Halbkreise, Viertelkreise usw. zeichnen.

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

Das einzige, was für mich funktioniert hat:

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

beide Antworten sind falsch. es sollte lesen:

x-=r;
y-=r;


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