2013-10-15 17 views
18

私は、塔からの信号強度を特定するための電気通信アプリケーションを開発しました。私はJavaスイングを使用しており、携帯信号送信機の塔の場所の特定の点の周りに円を描くときに問題が発生しています。私はすでにX、Y座標と半径値を計算しています。与えられたX座標とY座標を円の中間点として円を描く方法は?

私はサークルを描くために使用した以下のコードを見つけてください。問題が発生しています。

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

問題は、円を作成しますが、X座標とY座標を中心点としないことです。円の左上の点としてX座標とY座標が使用されました。

円の中心点として与えられたX座標とY座標を持つことで、円を描くのに誰も助けてくれませんか?

答えて

33

fillOvalは長方形の内側の楕円形にフィットし、with width=r, height = rには円が表示されます。 fillOval(x,y,r,r)に中心が(x、y)の円を描きたい場合は、幅の半分と高さの半分だけ矩形を移動する必要があります。

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

これは、両方の答えが間違っているx,y

+7

+1に同意します。パラメータはドキュメント内で 'w'と' h'とラベル付けされています。 –

6

これは、中心部には、少なくとも限りポイント(X - r,Y - r)が範囲内に両方のコンポーネントを持っているよう(X,Y)、 こと作るために適切な場所あなたのサークルの左上をしなければならない

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

であなたのドローラインを交換してください。

+1

私はそれもトップがあれば動作しますかなり確信しています左隅が範囲外です – Cruncher

+0

私は決してオフスクリーンで物を描こうとはしませんでした。しかし、確かにコーナーが範囲内にあれば機能します。 – qaphla

+0

私は、OPが擬似 'd'(直径)として' r'(半径)を使用していたことに気付くために@Cruncher –

0

を中心とする円を描画します。それは読んでください:

x-=r; 
y-=r; 


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

を私のために働いていた唯一の事:

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

は、だから我々はすべて同じ家の仕事をしていますか?

最も賛成投票の答えが間違っているのは妙です。 draw/fillOvalは、半径ではなくパラメータとしてheightとwidthを取ることを忘れないでください。だから、正しく描画およびユーザー提供のx、yの円を中心と半径の値は、あなたがこのような何かをするだろうします

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

ようこそスタックオーバーフロー!私はあなたに[ツアーをする]ことをお勧めします(http://stackoverflow.com/tour)。 答えを出すときは、[あなたの答えが何であるかについてのいくつかの説明](http://stackoverflow.com/help/how-to-answer)がその答えです。 –

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

} 
関連する問題