2013-10-15 20 views
18

Kulelerden sinyal güçlerini bulmak için bir telekomünikasyon uygulaması geliştirdim. Ben java salınımı kullandım ve çemberi, mobil sinyal vericisi kulesi yerinin verilen noktasında çizerken bir problem yaşıyorum. X, Y koordinatlarını ve ayrıca yarıçap değerini zaten hesaplamıştım.Çemberin orta noktası olarak verilen X ve Y koordinatlarına sahip bir daire nasıl çizilir?

Ben daire çizmek için kullandım aşağıdaki kodu bulup sorunları var demektir edin.

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

Sorun, bu çemberi oluşturur, ancak X ve Y koordinatlarını orta nokta olarak almadı. X ve Y koordinatlarını dairenin sol üst noktası olarak aldı.

kimse verilen X alarak bana daire çizmek için yardım lütfen ve Y dairenin merkezi noktası olarak koordinatları olabilir.

cevap

33

fillOval, bir dikdörtgenin içinde bir oval uyuyor. fillOval(x,y,r,r)'un ortasından (x, y) bir daire çizmesini isterseniz, dikdörtgeni genişliği ve yarıçapının yarısına göre değiştirmeniz gerekir.

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

Bu

her iki cevap yanlış olan x,y

+7

+ 1 kabul. Parametreler, dokümanlardaki "w" ve "h" olarak etiketlenmiştir. –

6

Bu yapmalıdır

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

ile çekme hattını değiştirin sol üst merkez (X,Y) olmak yapmak için doğru yer senin dairenin, en azından sürece nokta (X - r,Y - r) aralığında her iki bileşeni vardır olarak . Eğer bir daire almak with width=r, height = r

+1

ben bile Üstteki çalışır eminim sol köşede aralık dışı – Cruncher

+0

Hiç bir şeyleri ekrandan çizmeyi denemedim, bu yüzden bunun için sözünü alacağım. Yine de, eğer köşe menzilde ise işe yarar. – qaphla

+0

bir sözde 'D (çap) olarak 'r' (çapındaki) kullanılarak yapıldı OP fark için @Cruncher –

0

kısımda yer alan bir çember çizecek. okumalısınız: benim için çalıştı

x-=r; 
y-=r; 


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

tek şey:

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

Yani hepimiz aynı ev işi yapıyorsun?

en modern olarak cevap yanlış nasıl garip. Unutmayın, draw/fillOval, yüksekliği ve genişliği, yarıçap olarak değil, parametre olarak alır. Yani doğru çizmek ve kullanıcı tarafından sağlanan x, y ile bir daire ortalamak ve yarıçap değerleri böyle bir şey yapacağını hiç:

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

Yığın Taşmasına Hoş Geldiniz! [Tura katılın] tavsiye ederim (http://stackoverflow.com/tour). o (http://stackoverflow.com/help/how-to-answer) biridir [Cevabınız NEDEN ilişkin bazı açıklama] vermek tercih edilir bir cevap vererek. –

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

}