4

Cコードの仕様に従ってビットマップ/bmpファイルを作成していますが、ビットマップに単純なプリミティブを描画したいと思います。次のコードは、ビットマップに長方形を描画する方法を示しています。

if(curline->type == 1) // draw a rectangle
{
    int xstart = curline->x;
    int ystart = curline->y;
    int width = curline->width + xstart;
    int height = curline->height + ystart;

    int x = 0;
    int y = 0;

    for(y = ystart; y < height; y++)
    {
      for(x = xstart; x < width; x++)
      {
        arr[x][y].blue = curline->blue;
        arr[x][y].green = curline->green;
        arr[x][y].red = curline->red;
      }
    }

    printf("rect drawn.\n");
}

...
save_bitmap();

出力例: ここに画像の説明を入力してください

したがって、基本的には、指定されたxおよびyフィールド内のすべてのピクセルに赤、緑、および青の値を設定しています。

ここで、中点と半径を知って円を塗りつぶしたいと思います。しかし、どのピクセルがこの円の内側にあり、どのピクセルがそうでないかをどうやって知ることができますか?読んでくれてありがとう、どんな助けでもいただければ幸いです。

4

2 に答える 2

10

ポイントから円の中心までの距離が円の半径よりも小さい場合、ポイントは円の境界内にあります。

中心(x2、y2)と半径rの円と比較した点(x1、y1)を考えてみましょう。

int dx = x2 - x1; // horizontal offset
int dy = y2 - y1; // vertical offset
if ( (dx*dx + dy*dy) <= (r*r) )
{
    // set pixel color
}
于 2012-12-17T19:23:34.407 に答える
3

ウィキペディアで、ミッドポイントアルゴリズムを試すこともできます

于 2012-12-17T19:28:06.640 に答える