2012-03-10 26 views
2

基本的には、Graphicsを使って円を描きたいのですが、整数を使って配置するのではなく、二重の値を使用したいと思います。理想的には円の代わりに、intの代わりにdouble値で配置する方法は?

g.drawOval(0.5, 0.5, 50, 50); 

すべてのヘルプは大歓迎です!前もって感謝します!

私のdy変数は1に設定されていましたので、dyの半分にしたい場合は不可能です。代わりにdyを2に変更しましたそしてdxを1にする!愚かな私!

+0

これはできません。 xとyの値はピクセル位置であり、ハーフピクセルのようなものは使用できません。この関数に0.5を指定すると、0に切り捨てられます(おそらくintへのキャストが必要です)。 –

+0

クイック返信ありがとう!さて、基本的には、楕円形が0,45、または-45度でない角度で動くようにします。これを行う方法はありますか? – hazard1994

答えて

3

有効な唯一の方法は、Ellipse2D.Doubleシェイプを使用してGraphics2Dインスタンスのdraw(Shape)メソッドに渡すことです。最良の結果を得るために、アンチエイリアシングを有効にします。

public void yourDrawingMethod(Graphics gg) 
{ 
    /* Cast it to Graphics2D */ 
    Graphics2D g = (Graphics2D) gg; 

    /* Enable anti-aliasing and pure stroke */ 
    g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
    g.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE); 

    /* Construct a shape and draw it */ 
    Ellipse2D.Double shape = new Ellipse2D.Double(0.5, 0.5, 50, 50); 
    g.draw(shape); 
} 

あなたにもGraphics2D.fill(Shape)を使用することができます。

+0

ありがとうございます!これは便利です! – hazard1994

+0

これは正しい軌跡ですが、十分ではありません。拡大画像を含む私の答えを見てください:http://stackoverflow.com/a/31221395/1143274 –

+0

@EvgeniSergeev:ありがとう、私は知りませんでした、+1 :) –

-1

連続して移動したい場合は、xとyを変数doubleに保存することをお勧めします。オブジェクトが移動すると、変数は(角度によって)異なる速度で増加します、その後、あなただけのint型にキャストすることができます...

をそして、あなたは位置を取得します:
< 0、0.999>:0
を、1.999>:
< 2 1、2.999>:
< 3 2、3.999>:3
など。

十分に長い運動のためにそれが流暢だと思われます。しかし、あなたは技術に縛られているので、位置は整数値でなければなりません。 0.3ピクセルで何かを表示することはできません。あなたはピクセルを持っているかどうかにかかわらず、0.3ピクセルしか持つことができません。

+0

ええ、ちょっと混乱して、しかし与えられた私のアイデア!これまでに3ピクセル左に移動した楕円形のピクセルを移動する方法はありますか? – hazard1994

+2

Javaを使用することはできません。サブピクセルの精度は、しばらくの間、実際には... – 6502

+0

いいえ、スイングでは不可能です。 –

関連する問題