2

正確には、float 値または double 値を使用して図形を描画したいと考えています。

私が使う:

g.drawOval(0, 0, 10, 10);

円を描くことができますが、整数値しか使用できません。

同じことをする float/double 値を使用するステートメントはありますか?

ここに写真があります:問題

円は中央に配置する必要がありますが、私にはできません。解決策はありますか?

コード:

import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;
import javax.swing.JPanel;

public class Bulls_EYE extends JPanel
{
    int red, green, blue;
    int height, width;
    int heightOval = 475, widthOval = 475;
    Random rValue = new Random();

    public void paint (Graphics g)
    {           
        super.paint(g);

        for (int idx = 0; idx < 100; idx++)
        {
        g.setColor(new Color(red = 1 + rValue.nextInt(255), green = 1 + rValue.nextInt(255), blue = 1 + rValue.nextInt(255)));
        g.fillOval(width+2*idx, height+2*idx, widthOval-5*idx, heightOval-5*idx);
        }
    }
}
4

3 に答える 3

1

興味深い質問だと思いますが、もっと文脈が必要です。描画プリミティブは通常、ピクセル座標で表現されるため、ピクセルの分数はあまり意味がありません。

CAD アプリケーションのような精度が必要な場合は、表示の制限により、画面に表示されるものは基本モデルの近似値にすぎないことに注意してください。

モデルをメモリ内で正確に表現し (浮動小数点表現には制限があります)、近似値を画面に描画できます。

アップデート

前回の更新に基づいて:

は左上の座標で、幅と高さはfillOvalパラメータとして取るJavaDoc からわかります。(x, y, w, h)x, yw, h

同心円ごとに、左上の座標を内側に (この場合は 2 ピクセル) 移動して中央に配置する場合、幅と高さをその量の 2 倍減らす必要があります。次の行を変更します。

g.fillOval(width+2*idx, height+2*idx, widthOval-5*idx, heightOval-5*idx);

int dx, dy, dw, dh;
dx = 2*idx;
dy = 2*idx;
dw = 2*dx; // note this is 4*idx not 5*idx like you have currently
dh = 2*dy;
g.fillOval(width+dx, height+dy, widthOval-dw, heightOval-dh);

width1 番目と 2 番目のパラメーターで使用されている変数とheight変数は、実際には幅と高さとは何の関係もありませんが、代わりに、楕円が描画される原点からの開始オフセットを提供していることに注意してください。

于 2013-03-28T19:39:38.293 に答える
1

指定された座標で楕円を描画するとき、それらは画面上のピクセルを参照するため、これを行う必要はありません。ピクセル間を描画することはできないため、使用できる最小単位は 1 です。描画する前に値を丸めたい場合は、使用できます

g.drawOval(Math.round(a),Math.round(b),Math.round(x),Math.round(y)

float楕円形を描画する前に、a、b、x、および yを丸めます。私が見ることができる唯一の理由は、座標を計算し、結果が であるためfloat、上記のように丸める必要があることです。

于 2013-03-28T19:38:56.163 に答える