Ellipse() の繰り返しで模様を描く


VC++ の rand(乱数)関数を使って、色を変えながら円を重ねて綺麗な模様を描きます。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プロジェクトの設定

  1. プロジェクトを作成して WM_PAINT を表示して下さい。
    プロジェクトの作成は Windows プログラムを自動的に作成する を参照して下さい。
  2. WM_PAINT に円を描画するコードを追加します。
        case WM_PAINT:
            hdc = BeginPaint(hWnd, &ps);
            // TODO: 描画コードをここに追加してください...
            HBRUSH  hBrush,hOldBrush;
            int     i,r,g,b;
            for(i=200; i>0; i-=20)
            {   r= rand()%256;
                g= rand()%256;
                b= rand()%256;
                hBrush= CreateSolidBrush(RGB(r,g,b));
                hOldBrush= (HBRUSH)SelectObject(hdc,hBrush);
                Ellipse(hdc,30,10,i+30,i+10);
                SelectObject(hdc,hOldBrush);
                DeleteObject(hBrush);
            }
            EndPaint(hWnd, &ps);
            break;
        
  3. [デバッグ][デバッグなしで開始]を選択して、ビルドに続いて実行を行います。
    ページ先頭の画像が表示されたら完成です。

【演習】

  1. 円の中心に合わせて重ねて描画して下さい。
  2. Ellipse() を使って面白い模様を描画して下さい。

【NOTE】

Ellipse()

Ellipse() は矩形に内接する円(楕円)を描画します。
矩形が正方形のとき円が描画されます。
    for(i=200; i>0; i-=20)
    {   r= rand()%256;
        g= rand()%256;
        b= rand()%256;
             :
        Ellipse(hdc,30,10,i+30,i+10);
             :
    }

「i=200 から i>0 まで i-=20 ずつ」10個の円を描画します。
ループを考えるとき「最初の値と最後の値」がポイントです。
円の座標は次のようになります。
回数 iの値 左上座標 右下座標
1 回目 200 30,10 230,210
2 回目 180 30,10 210,190
3 回目 160 30,10 190,170
n 回目
10 回目 20 30,10 50,30

ソースコード 説明
Ellipse() 円(楕円)を表示
hdc デバイスコンテキスト
30,10 矩形の左上の座標
i+30,i+10 矩形の右下の座標

rand()

rand() は 0~32767 の一様乱数を発生する関数です。
この関数値を 256 で割った剰余(0~255)がRGBそれぞれの値になっています。
このプログラムは再描画する度に色が変わることに注目して下さい。
  r= rand()%256;
  g= rand()%256;
  b= rand()%256;

超初心者のプログラム入門(Win32API C++)