Рисование круга (с использованием пикселей, примененных к изображению с помощью цикла for)

Я хочу нарисовать круг (с 1 или 2 для циклов) с использованием положения пикселей (начинается слева вверху и заканчивается справа внизу)

Я успешно нарисовал прямоугольник с помощью этого метода:

private void drawrect(int width,int height,int x,int y) {
    int top=y;
    int left=x;

    if(top<0){
        height+=top;
        top=0;
        }
    if(left<0){
        width+=left;
        left=0;
    }

    for (int j = 0; j 

Массив пикселей содержит индекс пикселя, за которым следует его цвет.

pixels[index]=color;

До этого я использовал этот код для массива «изображение» и «пиксели» (если это вам поможет)

img = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
pixels = ((DataBufferInt) img.getRaster().getDataBuffer()).getData();

Но как я могу рисовать только белые пиксели, как на этом изображении, и игнорировать другие пиксели?

Pixel Image

9
задан Glorfindel 16 August 2019 в 17:25
поделиться

1 ответ

Можно вычислить минимальный угол между двумя пикселями и улучшить решение

...
void DrawCircle(int x, int y, int r, int color)
{
      static const double PI = 3.1415926535;
      double x1, y1;

      // calculates the minimun angle between two pixels in a diagonal.
      // you can multiply minAngle by a security factor like 0.9 just to be sure you wont have empty pixels in the circle
      double minAngle = acos(1 - 1/r);

      for(double angle = 0; angle <= 360; angle += minAngle)
      {
            x1 = r * cos(angle);
            y1 = r * sin(angle);
            putpixel(x + x1, y + y1, color);
      }
}
Kathir
1
ответ дан 4 December 2019 в 19:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: