Hoe een cirkel te tekenen met gegeven X- en Y-coördinaten als de middelste plek van de cirkel?

Ik heb een telecommunicatie-applicatie ontwikkeld voor het lokaliseren van signaalsterkten van de torens. Ik heb Java Swing gebruikt en ik heb een probleem bij het tekenen van de cirkel rond het gegeven punt van de locatie van het mobiele signaalzender. Ik heb de X-, Y-coördinaten en ook de Radius-waarde al berekend.

Zoek de onderstaande code die ik heb gebruikt om de cirkel te tekenen en het heeft problemen.

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

Het probleem is, het creëert de cirkel, maar het heeft de X- en Y-coördinaten niet als het middelpunt gehaald. Het kostte de X- en Y-coördinaten als het linkerpunt van de cirkel.

Kan iemand me helpen om de cirkel te tekenen door de gegeven X- en Y-coördinaten te hebben als het middenpunt van de cirkel.


Antwoord 1, Autoriteit 100%

De fillOvalPast op een ovaal in een rechthoek, with width=r, height = ru krijgt een cirkel.
Als u wilt fillOval(x,y,r,r)om een ​​cirkel met het midden te tekenen bij (x, y), zult u de rechthoek met de helft van de breedte en de helft van de hoogte moeten verplaatsen.

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

Hiermee tekent u een cirkel met het midden op x,y


Antwoord 2, Autoriteit 24%

Dus we doen allemaal hetzelfde huiswerk?

Vreemde hoe het meest up-gestemd antwoord verkeerd is. Onthoud, draw / fillove neemt de hoogte en breedte als parameters, niet de straal. Dus om een ​​cirkel correct te tekenen en te centreren met door de gebruiker geleverde X-, Y- en RADIUS-waarden die u zo zou doen:

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

Antwoord 3, Autoriteit 14%

Vervang uw draw-lijn met

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

Hiermee moet u de linkerbeneden links van uw cirkel de juiste plaats maken om het midden te laten zijn (X,Y),
minstens zolang het punt (X - r,Y - r)beide componenten in het bereik heeft.


Antwoord 4, Autoriteit 7%

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

Antwoord 5, Autoriteit 5%

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

U kunt x, y-coördinaten en straal wijzigen wat u wilt.


Antwoord 6, Autoriteit 2%

Beide antwoorden zijn onjuist. het moet lezen:

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

Antwoord 7, Autoriteit 2%

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

Antwoord 8, autoriteit 2%

Hiermee tekent u een boog met het middelpunt in de opgegeven rechthoek. U kunt tekenen, halve cirkels, kwartcirkels, enz.

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

Antwoord 9

Het enige dat voor mij werkte:

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

Other episodes