5本の線で星の形を描きます



正5角形の回転座標を求めて、5本の線で星の形を描きます。

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

プロジェクトの設定

  1. 新規プロジェクト(Star)を作成して下さい。
    math.h をインクルードします。
    #include <math.h>
  2. WM_PAINT: に星を描画するソースコードを追加します。
    回転座標は 0,0 を回転軸の中心として計算しています。
    200,200 は正5角形を画面中央に描画するためのオフセットです。
          case WM_PAINT:
               hdc = BeginPaint(hWnd, &ps);
               // TODO: 描画コードをここに追加してください...
               int     i,x,y;
               double  px,py;
               x= 200; y= 60;                  //円の中央真上の座標
               MoveToEx(hdc,x,y,NULL);         //開始点に移動
               for(i=0; i<5; i++)
               {   //円の中心を軸に144度回転する
                   px= (double)(x-200);        //描画の中心座標(200,200)
                   py= (double)(y-200);
                   x= (int)(px*cos(144.0/180.0*3.14)-py*sin(144.0/180.0*3.14)+200.0);
                   y= (int)(px*sin(144.0/180.0*3.14)+py*cos(144.0/180.0*3.14)+200.0);
                   LineTo(hdc,x,y);            //線を描く
               }
               EndPaint(hWnd, &ps);
               break;
        
  3. [デバッグ][デバッグなしで開始]を選択して、ビルドに続いて実行を行います。
    コンパイルの進行状況とエラーがあれば、エラーメッセージが表示されます。
    ページ先頭のウインドウが表示されたら完成です。
  4. ソースコードの説明です。
    座標の回転は、現在の座標「x,y」から「200,200」を減じて「0,0」を中心に計算します。
    三角関数は double 型なので、計算する領域の型を統一します。
    またパラメータはラジアン角なので、144 度をラジアン角に変換しています。
    ソースコード 説明
    x= 200; y= 60; 円の中央真上の座標です
    MoveToEx(hdc,x,y,NULL) 最初の座標に移動します
    for(i=0; i<5; i++) 5本の線を描きます
    px= (double)(x-200) X座標の中心からのズレを求めます
    py= (double)(y-200) Y座標の中心からのズレを求めます
    x=int(px*cos(144.0/180.0*3.14)-py*sin(144.0/180.0*3.14)+200.0)144度回転したX座標を求めます
    y=int(px*sin(144.0/180.0*3.14)+py*cos(144.0/180.0*3.14)+200.0)144度回転したY座標を求めます
    LineTo(hdc,x,y) 現在の座標から次の座標に線を引きます

【演習】

  1. 星型は正五角形ですが、正七角形で同じように描いてみて下さい。

  2. 同じ要領で次の図形を描いて下さい。
    角度を変えれば面白い図形を描くことができます。


  3. 星のマークの座標を POINT pont[10] に格納して、Polygon() で塗りつぶした星型を描いて下さい。
    星の座標は回転関数を作成して、Polygon() で描く前に格納します。

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