第14回 2次元グラフィックス

ファーストイヤー・セミナーⅡ
第14回 2次元グラフィックス(2)
グラフィックの利用(復習)

最初に #include<igraph.h> を忘れずに
←間違えないよう注意
直線を描く関数(復習)


Line(x1, y1, x2, y2) は点(x1, y1)から点(x2, y2)まで直
線を引く関数である
Line(10, 10, 50, 50) なら点(10, 10)から点(50, 50)まで直
線が引かれる
直線の設定(復習)

直線を描く場合には、
(1)直線の色を指定する
SetLineColor( 色指定 );
(2)直線の形式・太さを指定する
SetLineStyle( 形式,太さ );
(3)線を描く
Line (始点のx座標, 始点のy座標, 終点のx座標, 終点のy座標)
とする。
色指定


色指定は以下のようになる。
色の指定は、実際に描画する部分の直前におこなうこと。
グラフィックの位置(復習)

グラフィックでは左上が(0, 0)となり、x 座標は右へ、y 座
標は下へ行くほど大きくなる
(0, 0)
x軸
(10, 10)
(50, 50)
y軸
直線移動による図形の描画

山形の直線を少しずつずらして図形を描く
←忘れずに書いておくこと
←線の色を赤に変更
←左下から山の頂点まで線を引く
←線の色を青に変更
←頂点から右下まで線を引く
描画の手順

以下のように、少しずつ移動しながら山を連続して描いている
スタート地点から中間点、ゴール地点
へと線を引く
(320,310)
(10,320)
スタート、ゴールを少し(10ずつ)内側へ、
中間点を少し(10ずつ)上へずらして描画
(630,320)
この作業を繰り返す
グラフの描画

y = sin x のグラフ(正弦波)を描いてみよう
←math.h も必要
←「P」をあらかじめ定義し、プログラム中で使う
角度(°)をラジアンに変換するためのもの
←x軸、y軸の描画
←線の色を赤に変更
←角度を1度ずつ変化させ、
前の点(x1, y1) から
次の点(x2, y2)まで線を引く
#define の利用



プログラム中で使用する定数を、あらかじめプログラム
ファイルの最初の部分(#include~の後)に書いておくこ
とができる
書式: #define 変数名 数値
例) #define Pai 3.14159
ケタの長い数値や、頻繁に出てくる定数などをあらかじ
め書いておくと便利
表示例

まずグラフの軸を引き、そのあと少しずつ (x1, y1)、(x2, y2) を
計算しながら連続線を引いていく
(50,20)
(50,200)
(50,370)
(700,200)
練習

y = cos x のグラフ(余弦波)を描け
様々な図形の描画



四角形を描く関数
Rectangle (x1, y1, x2, y2);
左上の座標が (x1, y1)、右下の座標が (x2, y2) の四角形
円(だ円)を描く関数
Ellipse (x1, y1, x2, y2);
左上の座標が (x1, y1)、右下の座標が (x2, y2) の四角形
に内接する円(だ円)
図形内部の色指定
SetFillColor (色指定);
色指定をしない場合は黒で塗りつぶされる
練習:様々な図形の描画

赤い四角形と青い円を描いてみよう
ボールの運動


四角形の中をボールが跳ね回るプログラムを作ってみよう
プログラムが長いので資料の方も参照して作成してください
プログラム冒頭部分
←rand関数を使うので stdlib.h も入れる
L: 四角形の左側の x 座標
R: 四角形の右側の x 座標
T: 四角形の上側の y 座標
B: 四角形の下側の y 座標
r: ボールの半径
ボールの運動(2)
メイン関数冒頭部分
x, y : ボールの中心座標
vx, vy : ボールの進行方向と進む距離
x, y, vx, vy の初期化
vx, vy はマイナスの場合もありえるので
ランダムに(50%の確率で)-1をかけておく
ボールの運動(3)
繰り返し部分
白い四角形を描く
x, yの位置を計算する
x 軸方向に vx、y 軸方向に vy だけ移動
x, yの位置を判定し、枠をはみ出したら
枠内に戻し、進行方向を変える
(左へはみ出したら右へ、
下へはみ出したら上へ、
というように)
ボールの運動(4)
ボール描画部分
塗る色を赤色に設定
x, y を中心に半径 r の
円を描画
↑
このままだと実行が早すぎて見えないので
無意味な計算をして時間稼ぎ
(普通は sleep 関数などを使いますが、
Ultra-Cでは使えないので苦肉の策
ちょっと恥ずかしい力技なので将来
プログラマなどになる人はマネしないように)
第14回のレポート




以下のプログラムを作成し、メールで提出してください
宛先:
先程のボールの運動で、壁にぶつかるごとに色
がボールの色が変わるようにしてみてください
考え方:vx, vy の正負によって進行方向を4つに
分け、if 文を使ってボールの色を変えてみる