QBasicによるグラフィックス

 

1.スクリーン座標系と描画コマンド

1)ディスプレイの座標系

 VGAモードでのグラフィックスモードの設定
  SCREEN 12(16色まで使用可)

2)画面への描画コマンド

画面の消去:すべて消去する場合  CLS 0
        ビューポート内のみ消去する場合 CLS 1
点を描く    PSET(X1, Y1)
線を描く    LINE (X1, Y1) - (X2, Y2),色番号
       前の描画点から続けて線を描く場合  LINE -(X2, Y2)
       前の座標点からの相対座標で線を描く場合  LINE -STEP (dX, dY)
長方形を描く LINE(X1, Y1)-(X2,Y2), 色番号,B
          LINE(X1, Y1)-(X2,Y2),色番号,BF  '塗りつぶしの場合
円を描く  CIRCLE (X, Y), 半径,色
                弧 CIRCLE (X,Y), 半径,色,開始角(ラジアン),終了角(ラジアン)
       楕円 CIRCLE(X,Y),半径,色,,,アスペクト
塗りつぶし 線で囲まれた図形内を塗りつぶす.
       PAINT (X, Y), 塗りつぶしの色番号,境界色の番号

色番号
0:黒 1:青 2:緑 3:シアン 4:赤 5:マゼンタ 6:黄 7:白 8:灰色
9:青(明) 10:緑(明) 11:シアン(明) 12:赤(明) 13:マゼンタ(明) 14:黄(明) 15:白(明)
 

3)コード例

DIM n AS INTEGER

'スクリーンモードの設定
SCREEN 12

'線の描画例
LINE (0, 0)-(639, 479)

'長方形の描画
LINE (100, 100)-(0, 200), 2, B
LINE (200, 200)-(300, 300), 3, BF

'線の連続
PSET (400, 200)
LINE -(500, 300)
LINE -(400, 500)

'円の描画と塗りつぶし
CIRCLE (400, 400), 50, 4
PAINT (400, 400), 2, 4

'点の描画例
RANDOMIZE TIMER   '乱数の初期化
FOR n = 1 TO 300
        PSET (RND * 640, RND * 480)   'RNDは乱数(0から1までの乱数)
NEXT

2.ウィンドウ座標系の設定

1)ビューポートとウィンドウ座標系の設定

ディスプレイ座標内に任意の座標系を設定する.


 
(設定方法)

VIEW (100, 50)-(500,350)
WINDOW (-10,10)-(10,-10)

           (VIEWの文法)
     VIEW (X1,Y1)-(X2,Y2), 領域の色番号,ボーダーの色番号
 

2)プログラム例

 (2次関数y=x2を描くプログラム)
DIM n AS INTEGER
DIM x AS SINGLE, y AS SINGLE, x1 AS SINGLE, x2 AS SINGLE, y1 AS SINGLE, y2 AS SINGLE

SCREEN 12
CLS

x1 = -5: y1 = 5
x2 = 5: y2 = -5

VIEW (50, 50)-(450, 450), 0, 3
WINDOW (x1, y1)-(x2, y2)
LINE (-5, 0)-(5, 0), 4
LINE (0, -5)-(0, 5), 4

FOR x = -5 TO 5 STEP .01
        y = x^2
        IF x = -5 THEN
                PSET (x, y)
        ELSE
                LINE -(x, y)
        END IF
NEXT

'テキスト座標系
LOCATE 16, 56: PRINT "X"
LOCATE 17, 56: PRINT x2
LOCATE 4, 31: PRINT "Y"
LOCATE 4, 33: PRINT y1
LOCATE 17, 31: PRINT "0"

なお,テキスト座標系は30行×80字,印字場所はLOCATE(行,列)で指定する.
 
 
(問題)
1.上述のプログラムを基に以下の関数を描画しなさい.
  y = sin
  y = 1/3x3+1/2x3-2
   ただし sin xはsin(x)により求めることができる.xはラジアン(180度=π)

2.以下のデータを基にした棒グラフを作成するプログラムを作成しなさい.
  0-10点  2人
  10-20点 8人
  20-30点 12人
  30-40点 7人
  40-50点 4人


 

課題No.1

以下のプログラムを作成し,そのコードを印刷して提出しなさい.(提出は来週授業まで)
  (3限 11/24, 2限  12/1)

1.基礎問題

これまでのプリントで問題として挙げられているプログラムのうち,以下のプログラムについて
プリントアウトして提出しなさい.

1)西暦年を入力することにより,それが和暦の何年(明治・大正・昭和・平成のみでよい)であるかを表示する 
  プログラムを作成しなさい. 
2)学籍番号を入力することにより,その学生の学部,学年及び学科を表示するプログラムを作成しなさい.
 

2.応用問題

1)15人の学生に対し,50点満点の試験をしたところ,以下のような結果が得られた.
   得点:  29, 41, 1, 36, 28, 30, 35, 17, 16, 15, 36, 16, 33, 25, 6
  これらのデータをデータ文あるいはファイルの入出力を応用し,配列に格納するとともに,
  以下の範囲におけるデータの人数を算出するプログラムを作成しなさい.
    10点以下
    11点〜20点
    21点〜30点
    31点〜40点
    41点〜50点

2) 1)を基にグラフを描画するプログラムを作成しなさい.

(プリントアウトするために)
 メモ帳あるいはワード等でファイルを開く>ファイル名を入力する欄に*.basと入力することにより,
 ファイル名が表示されるので,該当するファイルを選んで出力してください.
(注意)
 なお他人の複製であると認められた場合には評価における減点の対象となります.
 自分で考えて作成するようにしてください.