如何绘制圆,将其定位为double值而不是int?

时间:2012-03-10 20:40:02

标签: java graphics jframe geometry shapes

基本上,我想使用Graphics绘制一个圆,但我不想使用整数来定位它,而是想使用double值。

理想情况下:

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

非常感谢任何帮助!提前谢谢!

感谢所有帮助人员,但是我想出了一条出路,我的dy变量设置为1,所以如果我想要dx到dy的一半,那将是不可能的,相反我只是将dy更改为2并且dx到1!愚弄我!

2 个答案:

答案 0 :(得分:4)

唯一有效的方法是使用Ellipse2D.Double形状并将其传递给draw(Shape)实例的Graphics2D方法。为获得最佳效果,请启用消除锯齿:

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)

答案 1 :(得分:-1)

如果你想要连续运动,那么最好的方法是将x和y保持在double个变量中。当对象移动时,变量将以不同的速率递增(取决于角度),然后您可以转换为整数...

你将获得职位:
< 0,0.999> :0
< 1,1999 *> :1
< 2,2.9999> :2
< 3,3.999> :3
等。

对于足够长的运动,它会显得流畅。但是这些位置必须是整数值,因为你受技术的约束。您无法以0.3像素显示某些内容。您要么拥有像素,要么不拥有像素。