スライド 1

初年次セミナー
第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関数のグラフを右に少しずつずらしながら、多数の線
を描画するプログラム