Как нарисовать круг, поместив его в двойное значение вместо целого? - PullRequest
2 голосов
/ 11 марта 2012

По сути, я хочу нарисовать круг, используя Graphics, но вместо того, чтобы использовать целые числа для его позиционирования, я бы хотел использовать вместо него двойные значения.

В идеале:

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

Любая помощь очень ценится! Заранее спасибо!

Спасибо за помощь, ребята, но я нашел выход, моя переменная dy была установлена ​​на 1, поэтому, если бы я хотел, чтобы dx составлял половину от dy, это было бы невозможно, вместо этого я просто изменил dy на 2 и дх до 1! Обмани меня!

Ответы [ 2 ]

4 голосов
/ 11 марта 2012

Единственный допустимый способ сделать это - использовать форму 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).

0 голосов
/ 11 марта 2012

Если вы хотите непрерывного движения, тогда лучше всего оставить x и y в double переменных.По мере движения объекта переменные будут увеличиваться с разной скоростью (в зависимости от угла), а затем вы можете просто приводить в целые числа ...

И вы получите позиции:
<0, 0.999>: 0
<1, 1.999>: 1
<2, 2.999>: 2
<3, 3.999>: 3
и т. Д.

Для достаточно длинного движения он будеткажется, беглоНо позиции должны быть целочисленными значениями, потому что вы связаны технологией.Вы не можете отобразить что-то на 0,3 пикселей.У вас есть пиксель или нет, у вас не может быть только 0,3 его.

...