2013-10-15 29 views
18

Ho sviluppato un'applicazione di telecomunicazione per localizzare le intensità del segnale dalle torri. Ho usato java swing e sto riscontrando un problema quando disegno il cerchio attorno al punto indicato della posizione della torre del trasmettitore del segnale mobile. Ho già calcolato le coordinate X, Y e anche il valore del raggio.Come disegnare un cerchio con le coordinate X e Y date come il punto centrale del cerchio?

Si prega di trovare il codice qui sotto, che ho usato per disegnare il cerchio e che sta avendo problemi.

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

Il problema è che crea il cerchio ma non ha preso le coordinate X e Y come punto centrale. Ha preso le coordinate X e Y come il punto in alto a sinistra del cerchio.

Qualcuno potrebbe aiutarmi a disegnare il cerchio avendo la data coordinate X e Y come il punto centrale del cerchio.

risposta

33

Il fillOval si inserisce un ovale all'interno di un rettangolo, with width=r, height = r si ottiene un cerchio. Se si desidera fillOval(x,y,r,r) per disegnare un cerchio con il centro a (x, y) si dovrà spostare il rettangolo da metà della sua larghezza e la metà della sua altezza.

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

Ciò disegnare un cerchio con centro nel x,y

+7

+1 per notare l'OP stava usando 'R' (raggio) come una pseudo d'' (diametro). I parametri sono etichettati come 'w' e' h' nei documenti. –

6

Sostituire la vostra linea di pareggio con

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

Questo dovrebbe rendere in alto a sinistra del cerchio il posto giusto per rendere il centro sia (X,Y), almeno fino a quando il punto di (X - r,Y - r) ha componenti sia nella gamma .

+1

Sono abbastanza sicuro che funziona anche se il top- l'angolo sinistro è fuori scala – Cruncher

+0

Non ho mai provato a disegnare cose fuori dallo schermo, quindi mi prenderò la parola per quello. Certamente, tuttavia, funziona se l'angolo è nel raggio d'azione. – qaphla

+0

Condivido @Cruncher –

0

entrambe le risposte sono non è corretto. Dovrebbe essere visualizzato:

x-=r; 
y-=r; 


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

L'unica cosa che ha funzionato per me:

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

Quindi stiamo facendo tutti lo stesso lavoro a casa?

Strano come la risposta più up-votato è sbagliato. Ricorda, disegnare/riempireOval prendere altezza e larghezza come parametri, non il raggio. Quindi, per disegnare correttamente e centrare un cerchio con x forniti dall'utente, y, e valori di raggio si farebbe qualcosa di simile:

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

} 
2
drawCircle(int X, int Y, int Radius, ColorFill, Graphics gObj) 
+4

Benvenuti in Stack Overflow! Ti raccomando [fare il tour] (http://stackoverflow.com/tour). Nel dare una risposta è preferibile dare [qualche spiegazione sul motivo per cui la vostra risposta] (http://stackoverflow.com/help/how-to-answer) è quella. –

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

} 
Problemi correlati