11/22/2006

第八章、 電腦繪圖

第八章、 電腦繪圖




QUICK BASIC 提供相當強之繪圖指令,可在單色色或彩色顯示器上顯示各種形狀、
顏色及圖案。為執行繪圖功能,所用之電腦必須有繪圖能力者,如選用 CGA、EGA 或
VGA等介面,若使用 HERCULES 介面,則必須事先執行 QBHERC.COM 檔。為進行繪圖,
必須先設定螢幕規格及模式,如:

SCREEN n,coloron,apage,vpage

此處 n 值可為 0,1,2,3,7,8,9,10,11,12 或 13。其選擇依所用之監督器及介面而
定。coloron 為顏色之選擇開開,若為零,則僅黑白顯示,非零值則顯示彩色,在 n值
大於 2 時,此參數會被忽略。apage為實際繪製頁,vpage 則表示螢幕顯示頁。通常繪
製與顯示頁相同時,此兩參數均可省略。除 n 值必須存在外,其他參數均可省略,但
若省略中間之參數時,其逗點仍應保留。

式中之 n 值為模式值。n 值為零時屬文字模式,可使用於單色或彩色之螢幕。其
餘依其解析度之不同,可進行繪圖。有些則是文字與圖形混合模式。一般之設定模式分
別如下,其餘則可參考使用手冊。

1. 單色或 Hercules 卡時 n = 0, 3 ( 解析度 720 x 349), 10
2. CGA n = O, 1, 2
3. EGA n = 0, 1, 2, 7, 8, 9, 10
4. VGA n = 0, 1, 2, 7, 8, 9, 10, 11, 12, 13

各模式下之螢幕解析度如下:

n=1,7,13 : 320 x 200 文字 40 x 25
n=2,8 : 640 x 200 文字 80 x 25
n=3 : 720 x 349 文字 80 x 25
n=9,10 : 640 x 350 文字 80 x 25 或 80 x 43
n=11,12 : 640 x 480 文字 80 x 30 或 80 x 60


螢幕像點及座標:
==============

在螢幕上之圖形是由許多光點所組成,此稱之為像素(pixels)。BASIC 中之繪圖指
令主要功能在打開或關閉像點及改變其顏色。

典型之螢幕係由這些像點縱橫排列而成。其像素之數目及排列方法通常由所裝置之
硬體以及在 SCREEN 中所宣告之模式所決定。可打開之像素數目愈多,其所能繪製之圖
像也愈清析。列如,SCREEN 1 之解析度為 300 x 200 點(水平 300 點,垂直 200 點)
,而 SCREEN 2 則為 640 x 200 點。故模式 2 每列為 640 點,為模式 1 之兩倍,其
圖形會顯得更尖銳、更清析。

依據所裝置之系統之差異,可選用其他模式以獲得更高之解析度。其相關特性如上
表所示。只要所裝設之螢幕係屬於上面所列模式中之一種,你即可利用座標之表示方式
來指定某一像素點。一般所用之座標為成對的。在螢幕之左上角為座標原點(0,0)。以
圖 5.1 中所示之螢幕為例,螢幕之右下角座標為 (639,199),右上角為 (639,0),左
下角為 (0,199);而其上中、中央及下中分別為 (320,0)、(320,100)及 (320,199)。
基本上,BASIC 是採用這些螢幕座標作為決定顯示圖形之根據。

有一點值得注意的是,圖像座標與文字模式下所用之座標並不相同。前面曾提及
LOCATE 之定位座標則是以文字模式為基礎的。在螢幕上,標準之文字模式為 80 x 25
個字。故每一個字元所佔之像素為 8 x 8 個。LOCATE 之指令通常對圖型模式之螢幕不
發生任何影響。

畫點、線及框:
============
1. 畫點:

PSET [STEP](x,y),color
PRESET [STEP](x,y),color

一般簡單之圖形可利用 BASIC 之內建指令為之。PSET 與 PRESET 為畫點之指令。
此兩種指令之功能基本上是一樣,尤其當其後面之顏色參數均分別設時為然。在高解析
度繪圖型中,顏色如為 0 代表黑色,1 代表白色(或綠色)。在顏色均未設定之情況,
PSET 會自動設定為前景顏色;而 PRESET 則自動設定為背景顏色。換言之,利用
PSET 可以在螢幕上繪一點,而用 PRESET 則可在螢幕上擦去該點,因為後者將繪製之
顏色設定與背景顏色一樣。

在此兩個指令中,若不用 STEP 時,其 x,y 所表示者為絕對座標,若加上 STEP
則 x,y 所示者為與前一點之相對座標。

2. 畫線與框:

LINE (x1,y1)-(x2,y2)
LINE -[STEP](x2,y2)
LINE [STEP] (x1,y1)-[STEP](x2,y2),color,B[F],style

繪直線時,必須指出起始及終止座標,其間以『-』連接,如第一種型式。若是從
上一次之直線為開始,則可不必將第一點寫出,採用第二種型式即可。與前面畫點之情
況相同,若在座標前加上 STEP,表示該座標為與前一點相對之座標,否則即為絕對座
標。

第三種型式為 LINE 較完整之指令格式,其 color 參數所指為線本身之顏色代號
。有畫線之指令事實上很容易畫框,但在 LINE 指令本身亦提供一簡易繪製方框之方法
。只要在指令後面選 B,則同一指令變成繪製方框之指令,而其兩點座標則分別為方框
之左上角及右下角之座標。若在 B 參數之後加上 F 參數選項,則所繪製之框中,將塗
滿顏色。在選 B 時,其前面之 color 若不選,則其逗點仍應保留。

3. 畫虛線:

利用 LINE 指令亦可將直線繪成虛線顯示。在 LINE 之參數最後一項為 style 所
代表者為不同虛線之代碼。style 為十六位元之整數值,以十六進位表示。其每位元之
值若為零時表示該像素關閉,為 1 時表示打開。例如 style=&HCCCC 時,其二進位表
示法為 1100110011001100,故所得之虛線為二點開二點閉之情況。

畫圓、橢圓與弧:
==============

1. 畫圓:

CIRCLE (x,y),radius
CIRCLE STEP (x,y),radius
CIRCLE [STEP](x,y),radius,color,start,end,aspect

CIRCLE 之指令可繪製一般圓形、橢圓、橄欖形及其他弧形曲線。畫圓時,事先必
須知道兩件事,其一為圓心之座標,其二為半徑。圓心之座標亦分為絕對及相對兩種,
相對者必須在其座標前加上『STEP』之字樣。有上述資料後,保證你可以繪出一個漂亮
的圓形。下面為其中二例:

CIRCLE (200,100),75
CIRCLE STEP(-120,0),75 執行二敘述後,相等於執行 CIRCLE (80,100),75

2. 畫橢圓:

在螢幕上,有時所繪之圓並不很圓,主要是螢幕硬體上之關係。為此,可利用
CIRCLE 指令中之 aspect 參數。加此參數時,若其前面之某些參數省略,其逗點仍應
保留。此處 aspect 之值為圓形封閉線內,垂直直徑與水平直徑之比值。此項比值可以
由此參數進行調節。但若從有意設定之角度來看,利用此參數之改變,亦可獲得橢圓形
或橄欖形,前者為此參數愈大之情況,後為此值小於零的情況。不過在此必須注意的是
,由於半徑在水平及垂直之方向不同,指令中之半徑參數應為何者方正確?在 BASIC
語言中,若 aspect 之值小於一時,半徑係指水平方向;aspect 若大於或等於一,則
半徑為垂直方向。下面為其數例:

CIRCLE (60,100),80,,,,3 '高瘦橢圓
CIRCLE (60,100),80,,,,3/10 '矮胖橢圓

3. 畫弧:

弧為圓或橢圓之一部份,或為短曲線。在瞭解 CIRCLE 指令如何畫弧之前,須先瞭
解 BASIC 如何量測角度。在 BASIC 中其函數所用之角度單位均為弧度。故在 CIRCLE
之指令所用之角度參數亦不例外(唯一例外是使用 DRAW 指令時,須以度表示之)。

在 CIRCLE 中其角度均以反時針方向為基準,並且以此方向作為起始與結束之劃分
。繪製一弧線時,需提供起始角度及終了角度。其格式如下:

CIRCLE [STEP](x,y),radius,[color],start,end[,aspect]

式中之 start 及 end 分別為弧線之起始弧度及終了弧度。但記得若僅為畫弧線部
份時,則 start 與 end 所需之弧度均應為正值。

4. 畫餅:

CIRCLE 指令亦可用來畫切分之餅。上面所列參數 start 與 end 所需之弧度若均設
定為負值,則執行該指令之後,弧線之起始及終點均會與其圓心相連,構成一個被切開
之餅,可作為繪製派圖之用,如:

CIRCLE (100,50),30,,-2.5,-3.14

沒有留言: