座標の回転関数で星の形を描く



VC++ で座標の回転関数を使って正5角形の座標を求めて星の形を描きます。

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

プログラムの説明です。

  1. 新規プロジェクト(FncStar)を作成して下さい。
    関数の宣言に Rotate() を追加して下さい。
        // このコード モジュールに含まれる関数の前宣言:
        ATOM            MyRegisterClass( HINSTANCE hInstance );
        BOOL            InitInstance( HINSTANCE, int );
        LRESULT CALLBACK    WndProc( HWND, UINT, WPARAM, LPARAM );
        LRESULT CALLBACK    About( HWND, UINT, WPARAM, LPARAM );
        void            Rotate(double rt,int cx,int cy,int *x, int *y);
        
  2. 続いて関数 Rotate() のソースコードを記述します。
        // 座標を回転する関数
        void  Rotate(double rt,int cx,int cy,int *x, int *y)
        {
                :
        }
        
  3. WM_PAINT: に星を描画するソースコードを追加します。
        case WM_PAINT:
             hdc = BeginPaint (hWnd, &ps);
             // TODO: この位置に描画用のコードを追加してください...
    
             int     i,x,y;
             x= 200; y= 60;                  //円の中央真上の座標
             MoveToEx(hdc,x,y,NULL);         //開始点に移動
             for(i=0; i<5; i++)
             {   // 円の中心を軸に144度回転する
                 Rotate(144.0,200,200,&x,&y);
                 LineTo(hdc,x,y);            //線を描く
             }
    
             EndPaint( hWnd, &ps );
             break;
        
  4. Rotate() 関数のパラメータに注目して下さい。
    回転座標(x,y)は、ポインタ(&x,&y)で渡します。
    渡されたポインタを *x,*y で受け取ります。
    回転した座標を *x,*y に設定して関数から戻ります。
    送り側 受取側 説明
    144.0 double rt 回転角度
    200,200 int cx,int cy 中心座標
    &x,&y int *x,int *y 回転座標
  5. [デバッグ][デバッグなしで開始]を選択して、ビルドに続いて実行を行います。
    コンパイルの進行状況とエラーがあれば、エラーメッセージが表示されます。
    ページ先頭のウインドウが表示されたら完成です。

【演習】

  1. Rotate() 関数を作成して、次の図形を描いてみて下さい。

  2. 次の図形を描いてみて下さい。

  3. 次の図形を描いてみて下さい。

関数のソースコード

超初心者の方のために関数のソースコードを掲載します。 (^_^;)

// 座標を回転する関数
void  Rotate(double rt,int cx,int cy,int *x, int *y)
{   double  px,py;
    px= *x-cx;
    py= *y-cy;
    *x= px*cos(rt/180*3.14)-py*sin(rt/180*3.14)+cx;
    *y= px*sin(rt/180*3.14)+py*cos(rt/180*3.14)+cy;
}

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