web-dev-qa-db-ja.com

与えられたX座標とY座標を円の中間点として円を描く方法は?

タワーからの信号強度を特定するための通信アプリケーションを開発しました。 Java swingを使用しました。モバイル信号送信機のタワー位置の指定されたポイントの周りに円を描くときに問題が発生しました。X、Y座標、半径も計算済みです値。

私が円を描くのに使った以下のコードを見つけてください、それは問題を抱えています。

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

問題は、円を作成しますが、中心点としてX座標とY座標を取りませんでした。円の左上の点としてX座標とY座標を取りました。

円の中心点として与えられたXとY座標を持つことで、誰でも私に円を描くのを手伝ってもらえますか。

22
нαƒєєz

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_を中心とする円が描画されます

38
arynaq

それで、私たちは皆同じ家事をしていますか?

最も投票された答えがいかに間違っているかは奇妙です。 draw/fillOvalは、半径ではなく、高さと幅をパラメーターとして使用することを忘れないでください。したがって、ユーザーが指定したx、y、およびradiusの値で円を正しく描画して中央に配置するには、次のようにします。

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

描画線を置き換えます

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

これにより、円の左上が中心になり、(X,Y)、少なくともポイント(X - r,Y - r)の両方のコンポーネントが範囲内にあります。

6
qaphla
drawCircle(int X, int Y, int Radius, ColorFill, Graphics gObj) 
3
Andres Mitchell
JPanel pnlCircle = new JPanel() {
        public void paintComponent(Graphics g) {
            int X=100;
            int Y=100;
            int d=200;
            g.drawOval(X, Y, d, d);
        }
};

x、Y座標、半径を自由に変更できます。

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

}
1
Farhad

これは、指定された長方形の中心に円弧を描きます。半円、四分円などを描くことができます。

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

両方の答えが間違っています。次のようになります。

x-=r;
y-=r;


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

私のために働いた唯一のもの:

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