初年次セミナー 第14回 2次元グラフィックス(2) C言語におけるグラフィックス処理(復習) C言語で画面上にグラフィックスを表示する場合、処理系 や使用するアプリケーションによって様々な違いがある Windows上でグラフィックスを表示するにはWindows API を利用する方法や、専用のソフトウエアを利用する方法 などがあるが、いずれも作業が複雑になる 初年次セミナーではグラフィックス表示のために作成さ れた「wingxa.h」というファイルを用いて、なるべく簡単に グラフィックス処理を体験しよう 参考テキスト:「Windowsですぐにできる C言語グラフィッ クス」、安居院猛、佐野元昭、関根詮明 共著、昭晃堂 wingxa.h の導入 「wingxa.h」は、参考テキストで使用されているグラフィックス処理の ためのヘッダファイル Windows上でグラフィックス処理をするためのオリジナルの関数がま とめられている デスクトップに「wingxa.h」を配信するので、届いたことを確認して 「14」フォルダにコピーすること(前回使用した「wingxa.h」を「14」フォ ルダにコピーしてもよい) 届かない場合は下記のホームページの「初年次セミナー」のリンク から右クリックでダウンロードし、「14」フォルダへコピー URL: http://ns1.shudo-u.ac.jp/~iyori/ ウインドウを描画する ウインドウの描画には以下のような関数を使う 関数名 gwinsize(w, h) ginit(1) gsetorg(x, y) 機能 ウインドウの大きさを幅w、高さhに設定する ウインドウを描画する(静止画) 座標の原点をウインドウ左下端から(x, y)の位置にする 描画色の指定には以下のような関数を使う gcolor(r, g, b) color16(x) 機能 RGB値(0~255)を指定して色を設定する 0~15の数値で色を指定する ※ color16関数で指定できる色は以下の通り 0 黒 1 暗青色 2 茶色 3 暗深紅色 4 暗緑色 5 暗青緑色 6 暗黄色 7 暗灰色 8 灰色 9 青色 10 赤色 11 深紅色 12 緑色 13 青緑色 14 黄色 15 白 様々な図形を描画する 図形描画に使用できる関数は以下のようなものがある 関数名 機能 glinewidth(w) 描画の線の太さをwピクセルにする gpnt(x, y) 座標(x, y)に1ドットの点を描く gline(x1,y1,x2,y2) 座標(x1, y1)から(x2,y2)まで直線を引く gtriangle(x1,y1,x2,y2,x3,y3) 座標(x1,y1)、(x2,y2)、(x3,y3)を頂点とする三角形の辺を描く gtri(x1,y1,x2,y2,x3,y3) 座標(x1,y1)、(x2,y2)、(x3,y3)を頂点とする三角形を描く(中は塗りつぶし) gtetragon(x1,y1,x2,y2,x3,y3,x4,y4) 座標(x1,y1)、(x2,y2)、(x3,y3)、(x4,y4)を頂点とする四角形の辺を描く gtetra(x1,y1,x2,y2,x3,y3,x4,y4) 座標(x1,y1)、(x2,y2)、(x3,y3)、(x4,y4)を頂点とする四角形を描く(中は塗りつぶし) grectangle(x1,y1,x2,y2) 座標(x1, y1)、(x2,y2)を対角点とする長方形の辺を描く grect(x1,y1,x2,y2) 座標(x1, y1)、(x2,y2)を対角点とする長方形を描く(中は塗りつぶし) gcircle(x,y,r) 座標(x, y)を中心とする半径rの円周を描く gcirc(x,y,r) 座標(x, y)を中心とする半径rの円を描く(中は塗りつぶし) gellipse(x,y,rx,ry) 座標(x, y)を中心とし、x方向の半径xr、y方向の半径yrの楕円の周を描く gellip(x,y,rx,ry) 座標(x, y)を中心とし、x方向の半径xr、y方向の半径yrの楕円を描く(中は塗りつぶし) 直線の組み合わせ図形を描いてみよう 直線描画の関数を使って、以下の図形を描いてみよう 直線の組み合わせ図形のプログラム 左下から中央へ赤い線を、中央から右下へ青い線を引く 原点を左下端から(50,50)に設定 左下の点はx座標を0から250まで 10ずつ増やす(y座標は0) 中央の点はy座標を0から250まで 10ずつ増やす(x座標は250) 右下の点はx座標を500から250まで 10ずつ減らす(y座標は0) sin関数の描画 直線描画の関数を使って、sin関数のグラフを描いてみよう sin関数の描画 原点を左下端から(50,200)に設定 (-50,0)から(650,0)へ線を引く(x軸) (0,200)から(0,-200)へ線を引く(y軸) (x1,y1)から(x2,y2)までの短い直線 をいくつも描いてグラフにする m_rad は角度をラジアンに変換する ための係数 100倍しているのは、そのままだと グラフが小さすぎるため 動画を描く:ボールの運動 ウインドウ内をボールが跳ねる動画を描いてみよう ・・・ ボールの運動:前半部分 動画の際はginit(2)とする (x,y)・・・ボールの中心座標 r・・・ボールの半径 vx・・・x方向の移動距離 vy・・・y方向の移動距離 0~359°の間で進行方向 の角度をランダムに決める srand関数で毎回進行方向 がランダムになるようにする (time.hが必要) ボールの運動:後半部分 何かキーが押されるまで実行継続 x-r, x+r はそれぞれボール の左端と右端の座標 ボールがウインドウの外に 出たら、枠内に戻して進行 方向を変更する 左右いずれかにはみ出し たときには、x方向を反転 上下いずれかにはみ出し たときには、 y方向を反転 バッファの切り替えをして画像を 描画することで、チラツキを抑える 第14回のレポート 以下のプログラムを作成し、メールで提出してください 宛先: (1)ボールの運動プログラムで、壁に当たるたびにボールの 色が変わるもの (2)sin関数のグラフを右に少しずつずらしながら、多数の線 を描画するプログラム
© Copyright 2024 ExpyDoc