2次 元 コン ピュー タ ・グ ラ フ ィ ックス の た めの 学 習用 プ ログ ラあ の
作成
一
基 本命 令 か ら図形描 写 まで
広
内
哲 夫
How to Make
a Program
of 2-Dimentional
Computer
Graphics
for Learnning
-Rang
from Programming Basic Routines to Drawing a Picture
Tetsuo
HIROUCHI
A raster
scan type of display
is suitable
for the begginers'
learning
computer
graphics(CG). This type of display generates a many dots on the screen, what are called"
picsels". As a result of assembling picsels, a picture or graph is formed on the screen.
But the biginners hardly know the theory of raster scan graphics. It is reported
in
this paper that the two-dimensional
CG4 program
is developed to help the beginners
understand
easily this theory.
Both using and understanding
the program will give them a knowlegde of process of
transforming
a picture
into a set of picsels by function such as difinition of picture,
geometry
transformation,
window-viewport
transformation,
clipping, generation
of line
and so on.
1.は じ め に現 在,初 心 者 向 きの コ ン ピ ュー タ ・グ ラ フ
ィ ック ス(CG)と
い え ば,ラ ス タ ー ス キ ャ ン
型 グ ラ フ ィ ック ス で あ る。 この グ ラ フ ィ ッ ク
ス は デ ィス プ レ イ画 面 の ピ クセ ル と呼 ばれ る
点 を1つ づ つ発 光 させ て,全 体 で 図 形 ・画 像
を創 り出 す もの で あ る。 これ は新 聞 の写 真 と
同 じで,近
くで見 る と点 が 多 数 集 ま っ て見 え
るが,遠
く離 れ た 所 か ら見 る と,1つ
の 図形
や絵 と して 見 え る とい う原 理 を採 用 して い る。
簡便 な ラ ス ター ス キ ャ ン型 デ ィス プ レイ で
も,'一 画 面 に25万6千
個 もの ピク セ ル が存 在
す る。しか し なが ら,CGの
初 心者 は この ピ ク
セ ル の存 在 に余 り気 が つ か な い よ うで あ る。
点(ピ
ク セ ル)の 集 ま りか ら1つ の 線 分 が 描
か れ,ま た 線 分 の 集 ま りか ら1つ の面 の色 塗
りが な され る とい うラ ス タ ー グ ラ フ ィ ッ クス
の原 理 を教 え る と,初 め て そ の存 在 を理解 す
る。 そ して グ ラ フ ィ ッ ク ・エ デ ィ ター 等 を使
っ て 図形 を作 成 す る初 心 者 は,最 終 的 に そ の
CGソ
フ トウ ェア に よ っ て コ ン トロ ー ル さ れ
た1つ
ユつ の ピ ク セル の発 光 か ら図形 が 形 成
され る こ とを知 る と,そ の ソ フ トウ ェア の作
画 ア ル ゴ リズ ム の精 巧 さ に驚 くもの で あ る。
筆 者 は大 学 の文 科 系 の学 生 の た め に初 等 的
な ラ ス タ ー グ ラ フ ィ ッ クス を教 えて い る。 そ
の 経 験 か らす る と,一 般 に学 生 が 興 味 を示 す
3次 元 の 物 体 表 示 や そ の 質 感 を表 現 す る レ イ
トレー シ ン グ な どの技 術 だ け を教 え るの は,
賢 明 な や り方 で な い と考 え る。 コ ン ピ ュー タ
に よ る作 画 は,画 面 とい う2次 元 平 面 が 基 礎
で あ り,2次
元 の理 論 的 取 り扱 い が 理 解 で き
な くて は,CG教
育 の 基 礎 は ぐ らつ い て し ま
う。
2次 元 図 形 は コ ン ピ ュー タで どの よ うに定
義 され る の か,そ の 図 形 デー タ は どの よ うな
ア ル ゴ リズ ム に よ っ て 処 理 さ れ る の か,そ
し て最 終 的 に どの よ うに して画 面 上 の1つ1
つ の ピク セ ル の 発 光 とし て図 形 が 再 現 され る
の か,等 の 基 本 的 な原 理 を学 ぶ こ とは,初 心
者 に と って 非 常 に重 要 な テ ー マ で あ る。
筆 者 は教 育 の場 で この よ うな こ と を理 解 さ
せ る初 心 者 用 の2次 元CGプ
ロ グ ラ ム を開 発
した の で 報 告 す る。 使 用 言語 は,現 在 の と こ
ろ ラ ス タ ー グ ラ フ ィ ッ ク スの 学 習 に は最 適 な
日本 電 気 製 のN88-BASIC(86)(以
降BASIC
と略 記 す る)を 用 い る。第2章 でBASICの
グ
ラ フ ィ ツク機 能 お よ び一 般 のCGソ
フ トウ ェ
ア の持 つ必 要 最 小 限 の機 能 を示 す。 第3章
で
は そ れ ら と同 様 な機 能 の基 礎 作 画 ル ー チ ン を
ソ フ トウ ェ ア命 令 と して 実現 す る方 法 を示 す 。
そ して 第4章
で,ピ
クセ ル の 発 光 を統 合 化 さ
れ た 図 形 描 画 プ ロ グ ラム に よ りコ ン トロー ル
す る こ とに よっ て,図 形 をデ ィス プ レ イ画 面
上 に描 き出 す 方 法 を紹 介 す る。
2.コ ン ピ ュ ー タ ・グ ラ フ ィ ッ ク ス の ・一般 機 能本 稿 は一 般 のCGソ
フ トウ ェア の 持 つ 基 礎
作 画 ル ー チ ン を ソ フ トウ ェ ア命 令 と して作 成
す る こ と を 目的 と して い る。 そ こ で本 章 で は,
第3章 以 降 の 基 本 作 画 ル ー チ ン を作 成 す る う
え で必 要 とな る機 能 の 概 略 を,BASICの
機
能 と対 応 させ て説 明 す る。
2.1BASICの
グ ラ フ ィ ック 文
BASICに
備 わ っ て い るグ ラフ ィック機 能 の
中 で,基 本 的 な 作 画 に関 す るハ ー ドウ ェア命
令 は,'次 の ス テ ー トメ ン トで あ る。
・PSET文
… … … 指 定 の画 面 位 置 に存 在 す
る ピ ク セ ル を 指定 の色 で
発 光 させ る。
・POINT文
… … …画 面 の ピク セ ル の 位 置 を
指 定 す る(ピ クセ ル は発
光 させ な い)。
・LINE文
… … … 指 定 の 画 面 位 置 か ら指 定
の 画 面 位 置 の間 に存 在 す
る ピ クセ ル を,指 定 の色
で 発 光 させ て線 分 を描 く。
・PAINT文
… … … 指定 の 色 で 発 光 し た ピク
セ ル が 形 成 す る閉 曲線 内
部 の 領 域 の ピ ク セ ル を,
指 定 の色 で す べ て発 色 さ
せ て,そ の領 域 に 色 を塗
る。
上 記 の4つ の ス テ ー トメ ン トは,ピ
クセ ル
とい う用 語 を用 い て そ の機 能 が 説 明 され て い
る。 ラ ス タ ー グ ラ フ ィ ック ス の"線
は点 の 集
ま りか ら定 め られ る"と い う原 理 に よ り,
LINE文
の機 能 は,BASICの
ハ ー ドウ ェ ア命
令 で あ るPSET文
を用 い て ソ フ トウ ェ ア 命
令 と して作 り出 す こ とが 可 能 で あ る。 また,
湎 は直 線 の 集 ま りに よ って 定 め られ る"と
い う原 理 に よ り,PAINT文
の 機 能 は,同 じ く
ハ ー ドウ ェア 命 令 のLINE文,さ
らに はPSET
文 を用 い て ソフ トウ ェア 命 令 と して作 り出 す
こ と も可 能 で あ る。
3,1節
と3.2節
の 目 的 は;LINE文
と
PAINT文
の持 つ機 能 を唯 一 の ハ ー ドウ ェ ア
命 令 で あ るPSET文
を 用 い て ソ フ トウ ェ ア
命 令 と して作 り出 す こ とで あ る。
2.2ウ
イ ン ドウ ービ ュー ポ ー ト変 換 とク リ
ツ ピン グ
作 画 機 能 以 外 の 基 礎 機 能 と し て,BASIC
に は次 の2つ
のハ ー ドウ ェア命 令 が存 在 す る。
・WINDOW文
… … … ウイ ン ドウ を定 義 す
る。
・VIEW文
ビ ュー ポー トを定 義
図1ウ ィ ン ドウ と ピ ュ ー ポ ー ト 図2マ ル チ ビ ュ ー ポ ー ト 図3 ク リッ ピ ン グ す る 。 CGに お い て は 一 般 に,画 面 上 の 座 標(ピ ク セ ル そ の も の)を ス ク リー ン 座 標 と呼 び,利
用者 の 定義 す る座 標 をワ ー ル ド座 標 と呼 ぶ 。
ウ イ ン ドウ とは,広 大 な ワー ル ド座 標 系 の 中
で画 面 に写 し出 した い部 分 の領 域 で あ り,ビ,
ユー ポー トとは,ウ イ ン ドウ を実 際 に 写 し出
す 画 面 上 の領 域 で あ る。 ウ イ ン ドウ と ビ ュー
ポー トの 関係 を図1に 示 す。
WINDOW文
とVIEW文
が ペ ア で 用 い ら
れ る と,それ らの文 は,ワ ール ド座 標 系 で 表 現 さ
れ た図 形 デ ー タ をス ク リー ン座 標 系 の デ ー タ
に 自動 変 換 す る。これ を ウ イ ン ドウービ ュー ポ
ー ト変 換 と呼 ぶ 。
またCGで
は一 般 に,図2に
示 す よ うに,
1画 面 に複 数 個 の ウ イ ン ドウ を それ と同数個
の ビ ュー ポ ー トと して 設 定 す る こ とが で きる。
これ をマ ル チ ビ ュー ポー ト と呼 ぷ 。 そ の た め
に 画 面表 示 の 際,ビ
ュー ポー ト領 域 か らは み
出 した 図 形 を,図3の
よ うに刈 り取 る ク リッ
ピ ン グ と呼 ば れ る操 作 が行 わ れ る。VIEW文
は これ を行 う。
3.3節 と3.4節 の 目 的 は,WINDOW文
と
VIEW文
と同 様 な機 能 の 基 礎 作 画 ル ー チ ン
を ソフ トウ ェア 命 令 として 作 り出す こ とで あ
る。
2.3幾
何 変 換
CGに
お け る重 要 な 技 術 の1つ
は,図 形 全
体 を二 定 の 規 則 の も とに変 形 す る こ とで あ る。
これ を幾 何 変 換 と呼 ぶ。 例 え ば高 層 ビル を表
現 す る3次 元 モ デ ル に3次 元幾 何 変換 を適 用
す れ ば,実 際 に 飛行 機 に乗 って 高 層 ビル群 を
支社別自動車販売実籔
図4ビ
ジネ スグ ラフの例
斜 め に上 か ら,真 上 か ら,あ る い は遠 方 上 空
か ら眺 め た よ うな 景 観 を画 面 上 に作 り出 す こ
とが で き る。 幾 何 変 換 に は,平 行 移 動,拡 大
縮 小,反
転,せ
ん断,回 転 等 の変 換 が あ る。
これ らの 変 換 は2次 元 グ ラフ ィ ック とい え ど
も,初 心 者 のCG学
習 に は不 可 欠 の課 題 の1
つ で あ る。
一 般 のCGソ
フ トウ ェア は この 幾 何 変 換 の
た め の ハ ー ドウ ェア命 令 を持 って い る。 残 念
な こ とにBASICで
は この命 令 を持 っ て い な
い 。
3.5節
の 目的 は この 幾 何 変 換 の 基 礎 作 画
ル ー チ ン を ソ フ トウ ェ ア命 令 と して作 成 す る
こ とで あ る。
2.4図
形 デ ー タの 定 義
図 形 を描 き 出 す に は,そ れ を構 成 す る図 形
要 素 を定 義 す る必 要 が あ る。 例 え ば風 景 を描
く場合,.そ の構 成 要 素 で あ る家,木,動
物,
雲 な どの 図形 要 素 が 必 要 で あ る。 図4に 示 す
よ うな ビジ ネ ス ・グ ラ フ ィ ックス を作 成 す る場
合 に は,自 動 車 を図 形 要 素 と して定 義 しな け
れ ば な らな い 。
一 般 のCGソ
フ トウ ェ ア にお い て は,図 形
デ ー タ ベ ー ス を持 っ て お り,こ の よ う な図 形
をデ ー タベ ー ス に蓄 積 で き る よ う に な っ て い
る。しか し,BASICで
は この よ うな機 能 を持
っ て お らず,図 形 要 素 の 定 義 お よび保 存 は,
利 用 者 自身 が 行 わ な けれ ば な らな い 。
第4章
の 目的 は,論 理 的 にす べ て の 図 形 の
定 義 が で き る一 筆 書 きの 図形 デ ー タの 定 義 方
法 とそ の 図形 描 写 の プ ログ ラム を示 す こ とで
あ る。
3.基
礎 作 画 ル ー チ ン の ア ル ゴ リズ ム
3.1直 線 の 作 画 Bresenhamは 整 数 の 加 減 算 の み を 用 い て, デ ジ タ ル 直 線 を 描 く ア ル ゴ リ ズ ム を 考 察 し た 。 こ れ はDDA(DigitalDifferentialAna1・ yzer;デ ジ タ ル 徴 分 解 析 機)と 呼 ば れ る 有 名 な 方 法 で あ る 。(2'4'5)本章 で は こ の 方 法 を 用 い て デ ジ タ ル 直 線 の ソ フ トウ ェ ア 命 令 で あ る 基 礎 作 画 ル ー チ ン を 実 現 す る 。 以 下 にDDAア ル ゴ リ ズ ム を 紹 介 す る 。 直 線 の 方 程 式 は y=dxx(1) で 表 わ さ れ る 。 こ こ でdy/dxは 直 線 の 傾 き で あ る 。 あ る ピ ク セ ル の 座 標 を(x,,y、)と し,そ のx>0の 方 向 に 隣 り合 う ピ ク セ ル の 座 標 を (x彦+1,ツ`+1)と す れ ば, xt+、=x十1(2) の 関 係 が 成 り立 ち,xtに お い てyの 真 の 値 と ytの 差 をet(こ れ を 誤 差 項 と 呼 ぶ)と す れ ば,xtに お け るyaの 値 と の 差et+iは, dx et・・=et+d y(3) で 与 え ら れ る 。 そ こで,:1:1:::綴;1三;1ン!@)
とす れ ば,初 期 値 裾y。,e。 を 定 め る と, 式(2)に よ るxtの 変 化 に 応 じ て,式(4)か ら ツ・ の 値 を 逐 次 決 定 す る こ と が で き る 。 座 標 (xt,ッ`)の 発 光 し た ピ ク セ ル の 点 列 が 求 め る デ ジ タ ル 直 線 で あ る 。 こ れ を 図5の 流 れ 図 に 示 す 。 し か し,式(3),式(4)に は 除 算 お よ び 実 数 演 算 が 含 ま れ て い る の で,こ の2つ の 演 算 を 取 り 除 き,整 数 の 加 減 算 の み で デ ジ タ ル 直 線 を図5Bresenhamの 直 線 描 画 ア ル ゴ リズ ム 決 定 す る こ と に す る。 そ こ で 式(4)の 誤 差 項et の 判 定 を,etが0.5よ り大 き い か 小 さ い か で 行 っ て い た が,こ れ を 新 し い 誤 差 項 e!a=et-0.5(5> を 用 い て,e'tが 正 か 負 か を 判 定 す る こ と と す る 。 こ れ は さ ら に 新 し い 誤 差 項 e"t=2(emsO.5)dx(6) を 用 い て も 同 じ こ とで あ る 。 そ こ で 誤 差 項 目e"iを 導 入 し,式(3),式(4)を 次 の よ う に 変 更 す る 。 e"t+1=e"`一 ト2∠1ッ(7) (た だ しe"。=-dx)
1∴
∴:鼠:2dy(8)
これ が 整 数 化 され たDDAア
ル ゴ リズ ム で あ
る。
リス ト1に こ の ア ル ゴ リ ズ ム を 用 い て
作 成 さ れ た 直 線 描 画 の ソ フ トウ ェ ア 命 令
で あ る 基 礎 作 画 ル ー チ ンDDAを
示 す。 行
番 号2100∼2170は1∠ ッ/∠
κ1≦1の 時,行 番 号
2190∼2250はldy/」
到>1の
時,そ
れ ぞ れ
利 用 され る。 以 下 に この サ ブル ー チ ン の引 数
お よび その 内 容 を示 す 。
・入 力 用 引 数
変 数X1,Y1…
… 線 分 の 始 点 座 標
変 数X2,Y2…
… 線 分 の 終 点 座 標
・出 力 用 引 数
な し
な お,線 に色 を付 け るの は,BASICの
ス テ
ー トメ ン トで あ るPSET文
PSET(X,Y),C
のパ ラメ ー タCに 該 当 す る色 コー ドを指 定 す
れ ば よい。
3.2色
塗 り
3.2.1基
本 的 な考 え方
図形 に色 を塗 る考 え方 の基 本 は,そ の 内 部
を色 の付 い た デ ジタ ル直 線 で隙 間な く埋 め る
こ とで あ る。 そ うす れ ば 図形 内部 に存 在 す る
ピク セ ルが すべ て発 光 す るの で,図 形 に色 を
塗 っ た こ とに な る。 ラ ス タ ー グ ラ フ ィ ッ クス
の世 界 で は線 が 点 か ら成 り立 って い る よ う に,
面 は線 か ら成 り立 っ て い る と考 え る。 本 章 で
は筆 者 の 考 案 した色 塗 りの ア ル ゴ リズ ム を紹
介 し,そ れ を用 い て色 塗 りの ソ フ トウ ェア 命
令 で あ る基 礎 作 画 ルー チ ン を実 現 す る こ とに
す る。
色 塗 りの 手 続 きの概 略 は次 の通 りで あ る。
図6に 示 す よ う に,ま ず直 線1,と 図 形 を構 成
す る辺 との 間 で 交 点P,,Q1を
求 め る。Pi,Q1
の 間 にデ ジ タル 直 線 を描 く。 そ し て この手 順
を 図6の 直 線11か
ら1。 に つ い て繰 り返 し行
う。 た だ し直 線1、,12,…
…,1。 か ら求 ま
る デ ジ タ ル 直線 は相 接 し合 う もの とす る。 図
形 領 域 の す べ て にデ ジタ ル 直 線 を描 く こ とが
リ ス ト1 2000,零**零***零 零****零*零*******零*竃*零 零****零 零*零 零零‡*零*零**零*零****** 2010,*DDA.サ フゆル ーチン* 2020,塞*零 ‡*零**零 零**零 窯零***零 零***零 家家零*零 象***零 零零*零 零零*零 零塞***零 零****** 2030*DDA 2040DEFINTI 20501×1=X1:IY1=YI:.IX2=X2:IY2=Y2 20601DX=IXZ-TX1:IDY=IYZ-IY1 20701A=ABS(IDX):IB=ABS(IDY) 20801X=IX1:IY=IY1 20901FIA>-IBTHENGOTO2110ELSEGOTO2190 2100,一 一b-一 一一一 一一一一一 一一一一一 一一一一一 一一一一一一 一一一一一 一一一 一一一一一一 一一一一一 一一一 一一一一 21101E=-ABS(IDX) 2120PSET(IX,IY),COL 21301FIX=IX2THENGOTO2260 21401X=IY+SGN(IDX) 21501E=IE+2*IB 21601FIE>=OTHENIY=IY+SGN(IDY):IE=IE-2*IA 2170GOTO2120 2180'一 一一一一一 一一一一 一一一一一一 一一一一一 一一一一 一一一一一 一一一一一 一一一一 一一一一一一 一一一一 一一一 一一一 21901E=-ABS(IDY) 2 .200PSET(IX,IY),COL 2210工FIY=IY2THENGOTO2260 22201Y=工Y+SGN《IDY} 22301E=工E十2*IA 22401FIE>=OTHENIX=IX+SGN(IDX):IB=IE-2*IB 2250GOTO2200 2260DEFSNGI 2270RETURN
図6デ
ジ タル直線 に よる色塗 り'
で きた ら,色 が 塗 れ た こ と にな る。
3.2.2交
点 の決 定
図7に 示 す よ うに1つ の 直線1に 対 す る交
点 が4つ 以 上 求 まる 図形 も存 在 す るが,ま
ず
1つ の 直 線1に 対 して交 点 が2つ だ け求 ま る
簡 単 な 図 形 を取 り上 げ る。 こ こ で は前 者 を 凹
多 角 形,後 者 を凸 多 角形 と呼 ぶ こ とにす る。
凹 多 角 形 は後 で説 明 す るが,そ
れ は 凸 多 角形
図7凹 多 角 形 の 交 点に比 べ て取 り扱 い が 難 し くな る。
図8(1)を 用 い て,直 線1,と 辺 との交 点 を 求
め る方 法 を説 明 す る。 計 算 が 簡 単 に な る よ う
に,直 線1童 は水 平 す な わ ちx軸
と平 行 で あ る
とす る。 そ こで,こ の1iを こ こで は水 平 直 線
と呼 ぶ こ とに す る。水 平 直 線1,を 次 の よ うに
定 め る。
y=h(9)
(i)条
件 を満 た す点
(2)条
件 を満 た さ な い 点
図8水
平直線 との 交点
図 形 の 頂 点A((x、,ッ 、))と 頂 点B(x,, y、)を 結 ぶ 直 線 の 方 程 式 は yx2 -x'(x-xl)+y,(10)21 と表 現 さ れ る 。図8(1)に 示 す よ う に,線 分AB と水 平 直 線1,と の 交 点P1の 座 標(㌔y。 〉 は,式(9),式(1① の 解 か ら;ゴ ≡llh)+x,}⑪
と得 られ る(た だ しy、=y2の
場 合 に は,解 は
不 能 ま た は不 定 とな る)。 しか し,こ の座 標
は,
一鳶 爵1鷺:寫:}(12)
な る条件 を満 た す 必 要 が あ る。 とい うの は,
も し満 た さな い 場 合 に は,点P1は
図8(2)に 示
す よ う な 線 分ABの
延 長 線 上 に存 在 す る こ
と にな るか らで あ る。
同様 に頂 点Cと 頂 点Dを 結 ぶ 線 分CDと
水
平 直 線1iと の 交 点Qiの 座 標 を 次 の よ う に求
め る。
糞1:蝋}(13)
この座標 は次の条件 を満 たす必要が ある。
;::;蘆;灘 篤 窪嶽}(14)
と ころ で,人 間 は水 平 直 線 と交 わ る辺 を一
瞬 の うち にパ タ ー ン認 識 能 力 を用 い て選 び 出
す こ とが で き る。 そ れ故,我
々 は交 わ らな い
辺 とliと の交 点 を求 め る こ とな どは,始 め か
ら無 意 識 に 除外 して,必 要 な辺 と1iと の交 点
だ け を選 択 的 に求 め る。 この作 業 は人 間 が頭
の 中 で行 う に は容 易 で あ るの で,選 択 的 に交
点 を求 め る プ ロ グ ラ仏 を作 成 す る こ と は一 見
簡 単 そ う に思 わ れ る。 しか し,こ の よ うな パ
タ ー ン認識 の 含 まれ た プ ログ ラム を開発 す る
こ とは非 常 に大 変 で あ る。
そ こで 便 法 を講 じ,水 平 直線11と 図形 を構
成 す るす べ て の辺 との 間 で総 当 た りで交 点 を
求 め る。そ して,こ の交 点 の座 標 の 中 か ら条 件
(12)お
よ び(14)を
満 た す交 点 の み を選 び 出 す。 こ
れ が 交 点PiとQiの
座 標 とな る。 この よ う に
し て求 めた 点Piと 点Qiと の 間 に デ ジ タル 直
線 を描 くの で あ る。
3.2.3問
題点
こしか し,こ の よ うな単 純 な ア ル ゴ リズ ム で
は 問題 が発 生 す る。 そ れ は図9に 示 す よ うな
図形 で は,頂 点A,E間
に はデ ジ タル 直 線 を
描 くこ とが で き るが,頂 点B,D間
に は描 く
こ とが で きな い 。 これ は頂 点 にお け る交 点 を
図io頂 点 に お け る 交 点 求 め る 順 番 に 関 係 す る 。 例 え ば 図10に 示 す 四 角 形 の 場 合,頂 点B, Dの そ れ ぞ れ に お い て2つ,合 計4つ の 交 点 が 求 ま る 。 そ の4つ の 交 点 と は,頂 点B,C を 通 る 水 平 線 分1と そ れ ぞ れ の 辺a,b,c, dと の 交 点 で あ る 。 交 点 を 求 め る 順 を1とa, 1とb,1とc,1とdの 組 の 順 とす る と, 交 点 のx座 標 は,頂 点B,B,D,Dのx座 標 で あ り,そ れ が そ の 順 番 で 求 ま る 。 そ こ で,デ ジ タ ル 直 線 は頂 点Bか ら 頂 点B, ま た 頂 点Dか ら頂 点Dへ と 描 か れ,頂 点Bか ら 頂 点Dへ は 描 か れ な い こ と に な る 。 こ の た め 図9に 示 す ① の デ ジ タ ル 直 線 は 描 く こ とが で き な い 。 次 に 水 平 直 線1と 辺a,b,c,dと の 交 点 を そ の 順 番 を 変 え て,1とb,1とc,1 とd,1とaの 組 の 順 に 求 め る 。 こ の 場 合 は, 交 点 のx座 標 は頂 点B,D,D,Bのx座 標 と な り,デ ジ タ ル 直 線 は 頂 点Bか ら頂 点Dへ, ま た 頂 点Dか ら頂 点Bへ と2回 描 か れ る 。'こ れ が 図9の ② の デ ジ タ ル 直 線 を 描 く こ と が で き る 理 由 で あ る 。 3.2.4不 要 交 点 の 除 去 上 記 に 示 し た 問 題 点 を 一 般 化 し て み よ う 。 頂 点 に お い て1つ の 水 平 直 線1に 対 し て 得 ら れ る 交 点 の 数 は,図11に 示 す よ う に3通 り存 在 す る 。 第 一 は 図 形 の 末 端 の 頂 点 で 交 点 が2 つ 得 ら れ る 場 合 〔1〕 で あ る 。 第 二 は す で に 詳 し く述 べ た が,2っ の 頂 点 のy座 標 が 同 じ で 交 点 が4つ 得 ら れ る 場 合 〔II〕 で あ る。 第 三 が1つ の 頂 点 で 交 点 が2つ,1つ の 辺 で 交 点 が1つ,合 計3つ 得 ら れ る場 合 〔m〕 で あ る 。 こ の よ う に 水 平 直 線1iと 辺 の 交 点 の 数 が 頂 点 の と こ ろ で 一 定 し な い の は,デ ジ タ ル 直 線 を 描 く う え で 困 っ た こ と で あ る 。 場 合 〔1〕 の 時 に は,1つ の 頂 点 に2つ の 交 点 が あ っ て も よ い が,し か し,場 合 〔II〕 で は,そ れ は 都 合 が 悪 い 。 頂 点 に お け る 不 要 な 交 点 を 除 去 す る 規 則 は 次 の よ う に 定 め ら れ る 。 図12に 示 す よ う に, 頂 点P。 のy座 標 をQo,ま た 頂 点P。 を 端 点 と す る2つ の 辺 の 他 の 端 点P、,P2のy座 標 を 凧 渦 と す れ ば,図12(1)の よ う に 水 平 直 線1の 点P。 に お け るy座 標 βもが,次 の 条 件 式 (β1<Ro<β2)or(β ヨ<βo<β1)(15) を 成 立 さ せ る の で あ れ ば,後 か ら求 め た 交 点 は 除 去 す る よ う に す る 。 ま た,図12(2)の よ う に,同 じ く水 平 直 線1の 点P。 に お け るy座 標 β。が,辺 の 条 件 式 ((β1<β))and(β ⊇<β))) or((β1>β))and(β2>βo))(16) を 成 立 さ せ る の で あ れ ば,後 か ら求 め た 交 点 は 除 去 し な い よ う に す る 。 こ の ア ル ゴ リ ズ ム を 追 加 す る こ と に よ り, 図9の ① の デ ジ タ ル 直 線 は 描 く こ と が で き る よ う に な る 。 3.2.5凹 多 角 形 の 場 合 図13に 示 す よ う な 凹 多 角 形 で は,水 平 直 線 1と 辺 との 交 点 は,頂 点 以 外 の と こ ろ で も4
図13平 行 線 が 存 在 す る 例
つ 以 上,し か も必 ず 偶 数 個 得 られ る。 図13(1)
の よ う に交 点 の 得 られ る順 番 が,そ
のx座 標
の 大 小 の 順 と同 じで あ る な らば,1つ
の水 平
直 線1か
ら定 め られ る デ ジ タ ル直 線 は,交 点
1と 交 点2,交
点3と 交 点4,・ … ・
・,交点7
と交 点8と
の間 で分 割 され て描 か れ る。
しか し,図13(2)に 示 す よ う に,交 点 は辺 を
定 め る頂 点 の番 号 の振 り方(図 中,頂 点 番 号
は丸 で 囲 まれ た数)に
よ って,そ の得 られ る
順 番 が変 化 す る。 図(2)の場 合,交 点3,交
点
2,交
点1,…
…,交 点4の よ うな順 で得 られ
るの で,そ れ らの交 点 を そ の順 に2つ づ つ取
り出 して デ ジ タ ル直 線 を描 く こ とは で きな い。
した が っ て,一 旦,得
られ た交 点 のx座 標 の
値 を大 小 順 に分 類 す る必 要 が あ る。 交 点 が そ
のx座 標 の順 で分 類 され れ ば,交 点 の座 標 を
大 小 順 に2個 つ つ取 り出 す こ とが で き る ので,
個 々 の デ ジ タ ル直 線 を凹 図 形 に対 し て も描 く
こ とが で き る。
3.2.6平
行 な 辺 が 存 在 す る時
これ ま で の ア ル ゴ リズ ム の 中で,不 都 合 な
こ とが1つ
あ る。 そ れ は 図14に 示 す よ うな非
常 に特 殊 な図 形 に お い て,水 平 直 線1と 平 行
な 辺 が 存 在 す る時 で あ る。 平 行 な2つ の直 線
の 間 で は,そ の解 は不 能 あ る い は不 定 な の で,
交 点 を求 め る こ とが で きな い 。 こ の場 合 は 当
然 デ ジ タル 直 線 を描 くこ とが で き な い。
この 問 題 に対 す る最 も簡 単 な解 決 策 は,水
平 直 線1の か わ り,y軸
に平 行 な垂 直 直 線1ノ
を設 定 し,x軸
上 を移 動 させ る アル ゴ リズ ム
を追 加 す る こ とで あ る。 この アル ゴ リズ ム は
これ まで に述 べ た もの と基本 的 に は全 く同 じ
ア ル ゴ リズ ム で,単
にx座 標 とy座 標 を機 械
的 に入 れ 替 え た もの で あ る。 効 率 上"2度
塗
り"の 無 駄 が 生 じ るが,図 形 の 塗 られ て い な
い 部 分 は確 実 に塗 る こ とが で き る。
* * * *リス ト2に 色 塗 りの ソフ トウ ェ ア 命 令 で あ
る基礎 作 画 ル ー チ ンXPAINTを
示 す。(なお
リス ト2に は水 平 直 線1と 平 行 な辺 が 存 在 す
る場 合 に 対 応 す る ル ー チ ン は含 ま れ て い な
い)。行 番 号3000∼3290は,水
平 直 線 の交 点 を
求 め,デ ジ タ ル直 線 を描 く部 分(1),行
番 号
3300∼3430は 不 要 交 点 を除 去 す る部 分(II),
行 番 号3450∼3550は
交 点 のx座 標 を分 類 す る
部 分(m)で
あ る。 図15に 部 分(1)の
ル ー
チ ンの 流 れ 図 を示 す。
な お,サ ブ ル ー チ ンXPAINTの
引 数 お よ
び そ の 内容 を以 下 に示 す 。
・入 力 用 引 数
配 列PX,PY…
図 形 の 頂 点 のx,y座
標
(頂 点 は反 時 計 回 りの順
に セ ッ トす る)
変 数N…
… ・
∵頂 点 の数
変 数X,Y…
… 図 形 内 の 任 意 の1点 の座
標(最
初 デ ジ タ ル直 線 を
描 き始 め る点)
変数GA-…
… イ ン ター フ ェ ー ス ・ル ー
チ ン を作 成 す る時 に用 い
られ る引 数 で あ り,こ こ
で はGAの
内 容 は0と
して使 用
・出 力 用 引 数
な し
3.3ウ
イン ドウービ ュー ポ ー ト変換
ワー ル ド座 標(W座
標)か
らス ク リー ン座
標(S座
標)に 座 標 変 換 す る公 式 は次 の よ う
に して 求 め られ る。 図16に 示 す よ う に左 上 隅,
右 下 隅 が(α,b),(c,d>の
右 手 系 のW
座 標 系 にお け るW(x,ッ)が,同
じ く左 上
隅,右 下 隅 が(P,a),(r,の
の 左 手 系
のS座 標 系 にお け るS(x',ヅ)に
座 標 変 換
さ れ る場 合,W座
標 系 とS座 標 系 に お け る そ
れ ぞ れ の線 分 の 比 は変 換 前 後 に お い て,x軸
方 向,y軸
方 向 とも常 に不 変 で あ る。 そ こで
(1)正
常 な 順 番
(2)都
合 の 悪 い順 番
図14凹 多 角 形 に お け る 交 点 の 得 ら れ る順リ ス ト2 3000,*零******零*******零***零*****塞*******零*****零************** 3010,*XPAINTサ フ・ル ーチン* 3020,*******零****************零***零*零**********************零* 3030*XPAINT 30401FPSW.OTHENDIMQX(20),QY{20):PSWc1 3050CY=Y 3060H=CY 3070GOSUB*GLN 30801FFLG=OTHENH=H+1+GA:GOTO3070 3090H=CY' 3100GOSUB*GLN 31101FFLG=OTHENH=H-1-GA:GOTO3100 3120RETURN 3130'一 一一 一一一一 一一一一 一一一 一一一 一一一一 一一一一一一 一一一一一一一一一 一一一一一一一一一 一一一 一一一一 一一一 3140零GLN 3150M=0 3160FORI=1TON 3170×1=PX(1):Y1=PY(1) 31801F工 く>NTHENX2=PX(1+1):Y2=PY(1+1)ELSER2=P%(1》: Y2=PY(1) 31901FY1<>Y2THENX=《H-Y1)零 《X2-X1)/(Y2-Y1)+X1:Y=H ELSEGOTO3220 32001FX=>XIANDX=〈X20RX=>X2ANDX=〈XITHEN ELSEGOTO3220 32101FY=>YIANDY=<Y20RY=>Y2ANDY=<YITHENGOSUB零GCHK 3220NEXTI 32301FM=OTHENFLG=1:GOTO3290 3240GOSUB零GSRT 3250FORI=1TOMSTEP2 3260X=QX《 工):Y=QY(1》:GOSUB零UPOINT: X=QX(1+1):Y=QY(1+1):GOSUB*ULINE 3270NEXTI 3280FLG=0 3290RETURN 3300,」 一一一一一一 一一一一一 一一一 一一一一 一一一 一一一■一一一一 一一一一一一一一 一一一一一一一一一 一一一 一一 一一一一一 3310*GCHK 33201FI=NTHENGOTO3340 3330P=M:Q=1-1:R31+1:cosvB零GSBT:GOTIO3380 33401FQX(M)=XTHENGOTO3360 33501FQX(1)=%THENGOTO3370 3360P=M:Q=N-1:R=1:GOSUB*GSET:GOTO3380 3370P=1:Q=N:R=2:GOgUB*G3BT 3380RETURN 3390,一 一一一一一 一一一一一 一一一 一■騨一一一 一一一一 一一一 一■o-一一一一 一一一 一啣一一一一一一一一一一 一一一 一一一一 3400*GSET 34101FM=OTHENM=M+1:QX(M)=X:QY(M)=Y:GOTO3430 34201FNOT(QX(P)=XAND((Y>PY(Q)ANDY<PY(R))OR(Y<PY(Q) ANDY>PY(R))))THENM=M+1:QX(M)=X:QY(M)=Y 3430RETURN 3440,一 一一一一 一一一 一一 一一一 一一一一 一一一一 一一一一一一 一一一一一一一一 一一一一一一一ロ ー一一 一一一一 一一一一 一 3450*GSRT 3460FORJ=1TOM
3470VL=QX(J) 34801D=J 3490FORK=JTOM 35001FQX(K)くVLTHEvVL=QX(K):ID=S 3510NEYTK 3520SWAPQX(J),VL 3530QY('ID)=VL 350NEYTJ 3550RETURN
(1)メ
イ ン プ ロ グ ラ ム
(2)GLNサ ブ ル ー チ ン 図15色 塗 りプ ロ グ ラ ム の 流 れ 図x軸,y軸
につ い て 次 の2つ の 比 例 式 が 成 立
す る。
(a-x)
(b-y):(認
駕
二c);(xd):(y:二;いの
式(1のを整 理 す る とW(x,y)か らS(x', yy')へ の 変 換 公 式 は:::羃:1}働
と な る 。 式(18)をBASICの 義 関 数 数 を 用 い て 表 現 す 冒固-. れ ば, DEFFNX(X)_((SX1-SX2)/ (WX1-WX2)*X十(WXl SX2-SXI*WX2)/WX1-WX2) DEFFNY(Y)_((SY1-SY2)/ (WY1-WY2)*Y十(WX1* SY2-SYI*WY2)/WY1-WY2) で あ る 。 こ こ で(WX1,WY1),(WX2, WY2),'CSX1,SY1),(SX2,SY2), (X,Y),(FNX(X),FNY(Y))が,そ れ ぞ れ(α,b),(c,d),(p,Q),(r, S),(x,y),(x',y')に 対 応 す る 。 3.4ク リ ッ ピ ン グ 3.4.1Sutherland-Cohenの 方 法 線 分 を ク リ ッ ピ ン グ す る 方 法 はSuther一 landとCohenの 考 案 し た ア ル ゴ リ ズ ム を 用 い る こ と に す る 。 こ れ は 次 の よ う な 方 法 で あ る。 図17に 示 す よ う に4つ の 直 線 で 囲 ま れ た ス ク リ ー ン上 の ビ ュ ー ポ ー ト の 範 囲 を α ≦x≦ c,b≦y≦d(左 手 座 標 系 で 表 現)と し, 点(x,y)が どの 領 域 に 存 在 す る か を4ビ ッ トで 表 現 さ れ た コ ー ドで 示 す 。 そ し て,そ の ビ ッ ト列 の 左 か ら右 へ 第1ビ ッ ト,第2ビ ッ ト,… …,第4ビ ッ ト と し, 第1ビ ッ ト… …x〈 α な ら ば1, そ う で な け れ ば0 第2ビ ッ ト… …x>dな ら ば1, そ う で な け れ ば0 第3ビ ッ ト… …x>cな ら ば1, そ う で な け れ ば0 第4ビ ッ ト… …x<う1な ら ば1, そ う で な け れ ば0 と い う ビ ッ トコ ー ド を 定 め る 。 そ し て,そ の ク リ ッ ピ ン グ の 判 定 は 次 の よ う に 行 う。 ① 完 全 可 視 … … … 両 端 点 の4ビ ッ ト コ ー ド が す べ て0の 時 ② 完 全 可 視 … … … 両 端 点 の4ビ ッ ト コ ー ド の 同一 ビ ッ トが 共 に1の 時 ③ ク リ ッ ピ ン グ … 上 記 ①,② 以 外 の 時(こ の 候 補 の 場 合,ビ ュ ー ポ ー トの 境 界 線 と の 交 点 の 情 報 が 必 要 で あ る) Sutherlandら の ク リ ッ ピ ン グ ・ア ル ゴ リ ズ図19ク リ ッ ピ ン グ の 手 続 き
ム は,ビ
ュー ポ ー トの境 界 線 を構 成 す る4つ
・
の直 線 と線 分 の 交 点 を求 め,そ の 交 点 の端 点
とす る線 分 の4ビ
ッ トコー ドが す べ て0に な
る まで,繰
り返 し なが ら同様 の点 を求 め て い
く方 法 で あ るA
な お,線 分 と ビュ ー ポー トの境 界 線 との交
点 は,3.2.1項
で 示 した の と同様 な直 線 の
方 程 式 を た て る こ と に よ っ て 求 め る こ とが で き る 。 そ の 交 点 を 図18に 示 す よ うに(礪 β) と し,こ れ を 次 項 で 用 い る 。 3.4.2具 体 的 手 続 き ク リ ッ ピ ン グ の 具 体 的 手 続 き を6つ の タ イ プ に 整 理 し,以 下 に 図19と と も に 示 す(図 中 の4本 の1は ビ ュ ー ポ ー トの 境 界 線 で あ る)。(1)タ イ プ1(図19(1)の 場 合) 線 分abの 端 点a,bの そ れ ぞ れ の4ビ ッ ト コ ー ド を 調 べ,す べ て0で あ る の で 完 全 可 視 と な る 。 ク リ ッ ピ ン グ さ れ た 線 分 は abそ の も の で あ る 。 (2)タ イ プ2(図19(2)の 場 合) 線 分abの 端 点aの4ビ ッ トコー ドは(0100) で,第2ビ ッ トが0で は な い の で 部 分 可 視 と な る 。 そ こ で12と 線 分abと の 交 点a' (α為 β2)を 求 め る と,新 し い 線 分a/bの4 ビ ッ ト コ ー ドは す べ て0に な り完 全 可 視 と な り,ク リッピ ン グ さ れ た 線 分 はa'bで あ る 。 (3)タ イ プ3(図19,(3))の 場 合) 線 分abの 端 点(a,b)は そ れ ぞ れ (0100),(0010)で,第2,第3ビ ッ トが 0で は な い 。 こ れ は 部 分 可 視 か 完 全 不 可 視 か で あ る 。 ま ず 線 分abと12と の 交 点aノ (α2,R2)を 求 め る 。 す る と線 分a/bの 端 点 aノの4ビ ッ ト コ ー ドの 第2ビ ッ ト は0と な る 。 ま た 線 分a'bと13と の 交 点b'0(α3, 属)を 求 め る と,線 分a/b'の 端 点 の4ビ ッ ト コ ー ドの 第3ビ ッ トは0と な る 。 そ う す る と新 し い 線 分a'bノ の4ビ ッ ト コ ー ド は す べ て0と な り,完 全 可 視 と な る 。 ク リ ッ ピ ン グ さ れ た 線 分 はa'b'で あ る 。 (4)タ イ プ4(図19(4)の 場 合)
線 分 。bの 輪
・の4ビ
ツ ト コ ー ド は
(1100)で あ る 。 ま ず 第1ビ ッ トが1.な の で,線 分abど11と の 交 点a'(α 、,β、)を 求 め る と,線 分a'bの 端 点a'の4ビ ッ ト コ ー ド は(0100)と な る 。 第2ビ ッ トは ま だ 1な の で,さ ら に 線 分a'bと12と の 交 点 a"(α2,β)を 求 め る 。 す る と線 分a"bの 端 点a"の4ビ ッ ト コ ー ド は す べ て0と なる 。線 分abの 端 点aはa→aノ →a"へ と ク
リ ッ ピ ン グ さ れ て い く。 同 様 に し て 端 点b も ク リ ッ ピ ン グ し,4ビ ッ ト コ ー ドが0と な る 端 点b'を 求 め る 。 ク リ ッ ピ ン グ さ れ た 線 分 はa"b'で あ る 。 (5)タ イ プ5(図19(5)の 場 合) 線 分abの 端 点a,bの4ビ ツ ト コ ー ド は(1100),(0011)で あ る 。 そ れ ぞ れ の 端 点 に つ い て,4ビ ッ トコ ー ドが す べ て0に な 、 る ま で,タ イ プ4で 行 っ た の と 同 様 な 手 続 き で 端 点 を 求 め る 。 ク リ ッ ピ ン グ さ れ た 線 分 はa"b"で あ る 。 (6)タイ プ6(図19(6)の 場 合) 線 分abに つ い て,ま ず 端 点aに つ い て 調 べ る 。 そ の4ビ ッ ト コ ー ドは(1100)で あ る 。 そ こ で 線 分abと1、 と の 交 点a' (α、,β、)を 求 め る と,線 分a'bの 端 点a' の4ビ ッ ト コ ー ド は(0100)と な る 。 そ こ で 次 に 線 分a/bと12の 交 点a"(α2,角)を 求 め る と,線 分a"bの 端 点a"の4ビ ッ ト コ ー ド は(0010)と な る。 そ こ で 今 度 は 線 分a"bと13の 交 点.a"(α3,鳥)を 求 め る と,線 分a"bの 端 点a"の4ビ ツ ト コ ー ド は(0100)と な る 。 そ こ で ま た 線 分a"bと 12と の 交 点a"(α2,/sz)を 求 め る 。 こ の 場 合,こ の よ う に し て 求 め ら れ た 線 分abの 端 点 はa→a'→a"→a"→ … … と繰 り返 さ れ て,そ の 端 点 の4ビ ッ ト コ ー ド は 決 し て0と な ら な い 。2回 の 操 作 で4ビ ッ ト コ ニ ドが す べ て0と な ら な け れ ば 完 全 不 可 視 と判 定 で き る 。 端 点bに つ い て 同 様 な 手 続 き を 行 っ て も,同 じ 結 果 が 得 ら れ る 。 **串 上 記 の6つ の タ イ プ を 整 理 し て 図20に 流 れ 図 と し て 示 す 。 図 中 のnは 交 点 を 求 め た 回 数, fは 完 全 不 可 視 か ど う か を 示 す フ ラ ッ グ (f=1な ら ば 完 全 不 可 視)で あ る 。 こ の 流 れ 図 を 通 過 す る と,線 分 の 新 し い 端 点 の 座 標 (α,β)と 端 点 の 情 報(f)が 求 ま る 。 リ ス ト4と 図21にSutherlandら の ア ル ゴ リ ズ ム に 基 づ い て 作 成 さ れ た ク リ ッ ピ ン グ の 基 礎 ル ー チ ンCLIPと そ の 流 れ 図 を 示 す 。ソ フ トウ ェ ア 命 令 で あ る ル ー チ ンCLIPは 内 部 に 2つ の 補 助 ル ー チ ンGROTとGBITを 持 っ て お り,GROTは 図20の 流 れ 図 を 実 現 し た も の で あ り,GBITは4ビ ッ トコ ー ド の 設 定 を
行 って い る。 以 下 にサ ブ ル ー チ ンCLIPの
引
数 とそ の 内容 につ い て示 す0
・入 力 用 引 数
変 数AA,BB…
… ク リ ツ ピ ン グ領 域
の 左 上 隅 の座 標
変 数CC,DD…
… ク リ ッ ピ ン グ領 域
の 右 下 隅 の座 標
変 数X1,Y1…
…線 分abの
端 点aの
座 標
変 数X2,Y2…
…線 分abの
端 点bの
座 標 ・出 力 用 引 数 お よ び そ の 内 容 変 数SX,SY… … ク リ ッ ピ ン グ さ れ た 新 し い 線 分a/b' の 端 点 の 座 標 変 数FLG.可 視 か 不 可 視 か の 情 報 0:可 視 1:不 可 視 3.5・ 幾 何 変 換リ ス ト3 4000,零**零********零****零*零***塞*******************零****零***零 家* 4010,零CI」IPサ フ゜ル ーチン* 4020,******************翠 零*******零*************************** 4030*CLIP 40401FX1<AAAND%2<AATHHNFLG=1:GOTO4150 40501FX1>CCANDX2>CCTHENFLG=1:GOTO4150 40601FY1<BBANDY2〈BBTHFNFLG=1:GOTO4150 4070工FX1>DDANDY2>DDTHENFLG=1GOTO4150 ×1:! 4090XX=XI:YY=Y1 4100GOSUB*GROT 41101FFLG=OTHENSX=XX:SY=YYELSEGOTO4150 4120XX-X2:YY=Y2 4130GOSUB*GROT 41401FFLG=OTHENEX=XX:EY=YY 4150RETURN 4160,一 一 一一一一一 一一一一一 一一一 一一一一・一一 一一一一一 一一一一一一一 一一一一一一一 一一一一一 一一 一一一一一 一一一 X170*GROT 4180NN=0 4190NN=NN+1 42001FNN>=3THENGOTO4370 4210GOSUB*GBIT 42201FX1=X2THENGOTO4300 42301FY1=Y2THENGOTO4330 42401FBT{1)=1THENYY=(Y2-Y1)/(X2-X1)*(AA-X1)+Y1:XX=AA: GOTO4190 42501FBT(2)=1THENXX=(X2-X1)/(Y2-Y1)*(DD-Y1)+X1:YY=DD: GOTO4190 426QIFBT(3)=1THENYY=(Y2-Y1)/(XZ-X1)*(CC-X1)+Y1:XX=CC: GOTO4190 4270工FBT(4)=1THENXX=(X2-X1》/《Y2-Y1》 塞 《BB。Y1》+X1:YY=BB: GOTO4190 4280GOTO4360 4290' 43001FBT(2)=1THENYY=DD:GOTO4190 43101FBT(4)=1THENYY=BB:GOTO4190 4320工FBT(1)=OANDBT《3)=OTHENGOTO4360ELSEGOTO4370 43301FBT(1y=1THENXX=AA:GOTO4190 43401FBT(3)=1THENXX=CC:GOTO4190 43501FBT(2》=OANDBT(4》=OTHENGOTO4360ELSEGOTO4370 4360FLG=O:RETURN 4370FLG-1:RETURN 4380'一 一一 一一一一一一 一一一一一 一一一一 一一一一一一一 一一一一一一 一一一一一一 一一一一一 一一 一一一一一一 一一一 一一 4390*GBIT 44001FXX<AATHENBT(1)=1BLSEBT(1)=0 44101FYY?DDTHENBT(2)=1ELSEBT(2)=0 4426工FXX>CCTHENBT(3)=1ELSEBT(3)=0 44301FYY<BBTHENBT(4)=1ELSEBT(4)=`0 4440RETURN
3.5.1変
換 の 理 論 式
CGに
お け る幾 何 変 換 の 数 学 的 基 礎 は ア フ
ィ ン変 換 で あ る 。2次 元 図 形 の変 形 は平 行 移
ノ動,拡 大 縮 小,反 転,せ
ん断,回 転 が あ るが,
平 行 移 動 以 外 の変 換 は2×2変
換 マ トリ ッ ク
ス を用 い る線 形 変 換 の 範 囲 で 記 述 可 能 で あ る。
しか し,平 行 移 動 を含 め る場 合 に億.同
次座
標 を含 む3×3変
換 マ トリ ック ス を用、・るア
フ ィ ン変 換 を導 入 し な け れ ば な らな い 。 以 下
にその 変 換 の 理 論 式 を示 す が,(x,ツ),(x'y')
は そ れ ぞ れ 変 換 前,変
換 後 の座 標 で あ る。
(1)平行 移 動
100 〔x'y'1〕=〔xy1〕010 txty1 =〔(x+ち)(y-←$y,)1〕 α9) (ち,む はx方 向,y方 向 へ の 移 動 量) (2)拡 大 縮 小 SXOO 〔x'y'1〕=〔xッ1〕os。0 001(20) =〔SxxSyy1〕 (Sx,syはx軸,y軸 方 向 へ の 拡 大 縮 小 率) (3)反 転 リ ス ト4 5000,******************零****塞**********零******零************* ロ 5010,*COCNVサ フNル ーチ ン 零 5020,************零*********家*****零*********家***零 率*******零*零* 5030*COCNV 5040XX=X:YY=Y 5050FORJ=1TO5 50601FTA(J)=1THENTX=TB(J):TY=TC(J}:GOSUB*TRANS 50701FTA(J)=2THENSX=TB(J):SY=TC(J):GOSUB*SCALE 50801FTA(J)=3THENIX=TB(J):IY=TC(J):GOSUB*INVRS 50901FTA(J)=4THENDA=TB(J):DB=TC(J):GOSUB*SHEAR 51001FTA(J)=5THENTH=TB(J):GOSUB*ftOTAT 5110NEXTJ 5120RETURN 5130'一 一一 一一一 一一一一一一 一一一 一一一一一 一一一一一一 一一一一一一 一一一一一 一一一一 一一一一一 一一一一 一一一 一一 5140*TRANS 5150XX=XX+TX 5160YY=YY+TY 5170RETURN 5180*SCALE 5190XX=SX*XX 5200YY=SY*YY 5210RETURN 5220*INVRS 5230XX=IX*XX 5240YY=IY*YY 550RETURN 5260*SHEAK 5270XD=XX:YD=YY 5280XX=XD+DA*YD 5290YY=DB*XD+YD 5300RETURN 531Q*ROTAT 520AL=(3.1415/180}*TH 5330XR=XX:YR=YY 5340XX=COS(AL}*XR-SIN(AL}*FR 5350YX=SIN(AL)*XR+COS(AL)*YRLx
〔x'y'1〕=〔xッ1〕OiyO OO1⑳ =Lち κlyy1〕 (Lx,iyはx軸,y軸 方 向 に 対 す る 反 転 係 数) (4)せ ん 断 1dbO 〔x'y'1〕=〔xy1〕dα10 001(羽) ((x+ddy)(y+dbx)) (dα,dbはx軸,y軸 方 向 に 対 す る せ ん 断 率) (4)回 転 cosBsingO 〔x!:y/1〕=〔xy1〕-cosθsil1θ0 001)(23) _((xcos9‐ysin6)(xsinB十ycosB)1) (θ は 原 点 を 中 心 と し て 反 時 計 回 り の 回 転 角 度)3.5.2合
成 変 換
各 種 の 幾 何 変 換 の合 成 は,個 々 の 変 換 マ ト
リ ック スの 積 か ら合 成 変 換 マ ト リッ ク ス を導
き出 し,そ れ を座 標 デ ー タ に作 用 させ る こ と
に よ り行 う こ とが で き る。例 え ば平 行 移 動 と
回 転 の個 々 の変 換 マ トリ ッ クス を それ ぞれR,
Tと し,そ の合 成 変 換 の マ ト リッ ク ス をCと
す る と,回 転 後 の平 行 移 動 の 合 成 変 換 マ トリ
ック スCRTは
CRT=RT⑦0
とな る。
一 般 のCGで
は
,合 成 変 換 は マ トリ ッ ク ス
演 算 と して 処 理 さ れ るが,BASICに
はマ ト
リ ッ ク ス演 算 機 能 が 備 っ て い な い。 そ こで,
幾 何 変 換 サ ブル ー チ ン は,個 々 の幾 何 変 換 の
代 数 式(各 変 換 マ トリ ック ス を座 標 デ ー タ の
列 マ トリ ック ス に作 用 さ せ た 結果 の列 マ トリ
ック ス の要 素)を 導 出 し,そ れ を用 い て作 成
す る こ と と した。 リス ト4に 作 成 され た 幾何
変 換 の ソ フ トウ ェア 命 令 で あ る基礎 ル ー チ ソ
COCNVを
示 す 。
サ ブ ル ー チ ンCOCNVは
大 き さ が5の
配
列 を用 意 す る こ とに よ り,最 大5つ
まで の幾
何 変 換 を連 続 し て合 成 す る こ とが で き る。配
列TAに
は 幾 何 変 換 の 種 類 を 以 下 の 番 号 で
指 定 す る。
1:平
行 移 動2:拡
大 縮 小
3:反
転4:せ
ん 断
5:回
転
合 成 変 換 の順 は 配 列TAの
要 素 番 号 の 順
で あ る。 配 列TBに
は要 素 番 号 に対 応 す る各
変 換 のx軸 に 関 す る情 報,配 列TCに
は 同 じ
く ッ軸 に 関 す る情 報 をセ ッ トす る(た だ し回
転 の 場 合 の みTBに
角 度 を セ ッ トす るだ け
で よい)。
以 下 に サ ブ ル ー チ ンCOCNVの
引 数 と そ
の 内容 につ い て 示 す 。
・入 力用 引数
変 数X,Y…
…合 成 変換 を行 う座 標
配 列TA…
… 変 換 の 種 類
配 列TB…
…変 換 のx軸
に 関 す る情
報
配 列TC…
… 変 換 の ッ軸 に 関 す る情
報
・出 力 用 引 数
変 数XX,YY…
… 合 成 変 換 され た 座
標
3.61イ
ン ター フ ェー ス ・ル ー チ ン
3.6.1基
礎 作 画 ル ー チ ンの 統 合
本 稿 で は,こ れ まで 次 の 基 礎 作 画 ル ー チ ン
等 を ソフ トウ ェア命 令 と して 作 成 し た。
・直 線 の作 画
リス ト1
・色 塗 り
リス ト2
・ウ ィ ン ドウ ー ビ ュー ポー ト変 換
3.3節
の定 義 関 数
・ク リ ッ ピ ン グ
リス ト3
本 節 で は上 記 の 基 礎 作 画 ル ー チ ン を統 合 化
し,図 形 を描 く基 本 機 能 をす べ て 黙自前"の
ソ フ トウ ェア 命 令 で まか な う こ とを試 み る。
この 目的 が 達 成 され る と,ピ ク セル を発 光 さ
せ る 唯 一 の ハ ー ドウ ェ ア命 令 で あ るPSET
文 だ けで,そ れ 以 外 の グ ラ フ ィ ック文 を用 い
る こ と な く,ど の よ う な 図 形 で も描 く こ と が 可 能 と な る 。 統 合 化 さ れ る 個 々 の サ ブ ル ー チ ン 等 は BASICの グ ラ フ ィ ッ ク 文 と 同 等 の 機 能 を 持 っ て い る が,そ れ は 完 全 で な か っ た り,仕 様 が 少 し 異 な っ て い た り す る 。 そ こ でBASIC の ス テ ー トメ ン トの 機 能 の 仕 様 に な る べ く合 わ せ る よ う に,こ れ ら の プ ロ グ ラ ム を 改 良 す る こ と に す る 。"自 前"の ソ フ ト ウ ェ ア 命 令 の サ ブ ル ー チ ン をBASICに 対 応 す る ハ ー ド ウ ェ ア 命 令 の ス テ ー トメ ン ト と 区 別 す る た め, 表1の よ う に,そ の 名 前 の 先 頭 に ア ル フ ァ ベ ッ トの"U"を 付 け,そ れ を以 後,ユ ー ザ ・ サ ブ ル ー チ ン と呼 ぶ 。 ユ ー ザ ・サ ブ ル ー チ ン の ボ デ ィ部 分 は す で に 完 成 し て い る の で,そ の 手 直 し は,新 し い ユ ー ザ ・サ ブ ル ー チ ン名 を 持 ち,そ の 名 前 を 介 し て ボ デ ィ 部 分 に 橋 渡 し す る イ ン タ ー フ ェ ー ス ・ル ー チ ン を 作 成 す る こ と で あ る。 な お, 直 線 作 画 の サ ブ ル ー チ ンULINEは,サ ブ ル ー チ ンUPOINTと 組 み 合 せ て 用 い る 仕 様 と し,そ の イ ン タ ー フ ェ ー ス を 設 定 す る 。 3.6.2イ ン タ ー フ ェ ー ヌ ・ル ー チ ン リス ト5に イ ン タ ー フ ェ ー ス ・ル ー チ ン を 示 す 。 ユ ー ザ ・サ ブ ル ー チ ンUWINDOW, UVIEW,UPOINT,ULINE,UPAINT は,こ の ル ー チ ン を 介 し て,各 サ ブ ル ー チ ン の ボ デ ィ の 部 分(基 礎 作 画 ル ー チ ン) ・DDAル ー チ ン ・XPAINTル ー チ ン ・CLIPル ー チ ン に リ ン ケ ー ジ す る 。 以 下 に イ ン タ ー フ ェ ー ス ・ル ー チ ン の 内 容 を簡 単 に 明 明 し て お く。 (1)UWINDOWサ ブ ル ー チ ン ウ ィ ン ド ウ の 領 域 を 定 義 し,ウ ィ ン ド ウ ー ビ ュ ー ポ ー ト変 換 の た め の 定 義 関 数 を 定 め,そ れ を 実 行 す る 。 変 数WSWは こ の サ ブ ル ー チ ンが 何 度 呼 び 出 さ れ て も よ い よ う に,ス イ ッ チ と し て 働 く。 (2>UVIEWサ ブ ル ー チ ン ビ ュ ー ポ ー ト の 領 域 の 値 を 変 数AA, BB,CC,DDに セ ッ ト し,そ れ をCLIPル ー チ ン で 用 い ら れ る よ う に す る 。 (3)UPOINTサ ブ ル ー チ ン ウ ィ ン ドウ ービ ュ ー ポ ー ト変 換 し た ス ク リ ー ン 座 標 の 値 を 変 数WKX,WKYに 保 存 す る 。 こ れ はULINEサ ブ ル ー チ ン との 連 係 に 対 応 す る た め で あ る 。 (4)ULINEサ ブ ル ー チ ン 変 数WKX,WKYか ら 変 数X1,Y1に 移 さ れ た ス ク リ ー ン座 標 で の 端 点 と,ス ク リ ー ン 座 標 に 変 換 さ れ たX2 ,'Y2の 端 点 の 座 標 を 用 い て,CLIPル ー チ ン を 介 し て ク リ ッ ピ ン グ す る 。 そ し て 線 に 関 す るDDAル ー チ ン に よ り線 分 を 描 画 す る 。 な お 変 数 WKX,WKYに 変 数X2,Y2の 値 を 保 持 す 表1ユ ー ザ ・サ ブ ル ー チ ンの 仕 様 サ ブ ルー チ ン名 引 数 と な る変 数 ・配 列 セ ッ トす る 図形 情 報 UWINDOW WX1,WYl WX2,WY2 ウ ィン ドウの 左 上 隅 の ワ ー ル ド座 標 ウ ィン ドウの 右 下 隅 の ワ ー ル ド座 標 UVIEW SX1_SY1, SX2,SY2 ビ ュー ポー トの左 上 隅 の ス ク リー ン座 標 ビ ュー ポー トの右 下 隅 の ス ク リー ン座 標 UPOINT X,Y ペ ンUPで 移 動 させ る先 の ワー ル ド座 標
ULINE X,Y COL ペ ンdownで 移 動 させ る先 の ワール ド座 標 座 標 線 の色 コー ド UPAINT N PX(n),PY(n) X,Y 境 界 線分 を構 成 す る点 の個 数 各 点 の ワー ル ド座 標 領 域 内 の1点 の ワー ル ド座 標 ・
リ ス ト5 6000,***零***********************************************零*** 6010,*UWINDOWサ プ ル ーチン* 6020,********************零********************************** 6030*UWINDOW 60401FWSW<>OTHENGOTO6080 6050DEFFNX(X)= ((SX1-SX2)/(WX1-WX2))*X+(WX1*SX2-SX1*WX2)/(WX1-WX2) 6060DEFFNY(Y)= (《SY1-SY2》/《WY1-WY2)》*Y+(WY1*SY2-SY1*WY2》/(WY1-WY2》 6070WSW=1 6080RETURN 6090,*****************************************零***********家* 6100,*UVIEWサ フ噛 ルーチ ン* 6110,********************************零 家***零****零 零*********** 6120*WIEW 6130AA=SXI:BB=SYI:CC=SX2:DD=SY2 6140RRTURN 6150,*******************************潔******家***‡ 塞*****零***零* 6160,*UPOINTサ フ喚ル ーチ ン* 6170,***零**************零*********塞 零******零*****零**零**零****** 6180*UPO工NT 6190WKX=FNX(X):WKY=FNY(Y) 6200RETURN 6210,***********************零****************零**零****零***零** 6220,*ULINEサ フいルーチ ン* 6230,*********家************零************零**********零******** 6240*UL工NE6 6250×1=WKX:YI=WKY 6260×2=FNX(X):Y2=FNY(Y) 6270WKX=XZ:WKY=Y2 6280GOSUB*CLIP 6290×1=SX:YI=SY:X2=EX:Y2=EY 63001FFLG=OTHENGOSUB*DDA 6310RETURN 6320,***********************零**************零*零******家*零*零**零 6330,*UPAINTサ フ.ル ーチン* 6340,********************************************零**零 零零***** 6350*UPAINT 6360GA=(WY2-WY1)/400-1 6370GOSUB*XPAINT 6380RETURN 6390,************塞*************零**家***塞****零***零*****零****** 6400,*PCTURサ フ噛 ルーチ ン* 6410,******************************************家******零***家* 6420*PCTUR 6430RESTORE 6440READGFLG,X,Y,COL 6450GOSUB*COCNV:X=XX:Y=YY 64601FGFLG=OTHENGOTO6510 64701FGFLG=1THENGOSUB*UPOINT:N=O:N=N+1:PX(N)=X:PY(N)=Y 6480工FGFLG=2THENGOSUB*ULINE:N=N+1:PX《N》=X:PY(N》=Y 64901FGFLG=3THENGOSUB*UPAINT:N=0 6500GOTO6440 6510RETURN
図22家 の 図 形 る が,こ れ は 現 在 の 線 分 の 端 点 の 座 標 を, 後 の ス テ ツ プ のULINEサ ブ ル ー チ ン で 利 用 で き る よ う に す る た め で あ る 。 (5)UPAINTサ ブ ル ー チ ン ゥ ィ ン ド ウ ー ビ ュ ー ポ ー ト変 換 を 行 う こ と に よ り,色 塗 り の た め の 水 平 直 線 の 移 動 間 隔 が 問 題 と な る 。 そ こ で ボ デ ィ と な る XPAINTル ー チ ン の 変 数GA(初 期 値 は ゼ ロ)を こ の イ ン タ ー フ ェ ー ス ・ル ー チ ン で 次 の よ う に 補 正 す る 。 GA=(WY2-WY1)/400-1 ま た,そ れ に と も な いXPAINTル ー チ ン の 行 番 号3260のLINE文 を 次 の 文 で 置 き 換 え る 。 3260X=QX(1):Y=QY(1) GOSUB*UPOINT X=QX(1+1):Y=QY(1+1) GOSUS*ULINE
4.図
形 デ ー タ の 定 義 と 描 画
4.1図
形 の デ ー タの 定 義
まず,図 形 の 描 き方 を具 体 的 に例 をあ げて
説 明 す る。 例 え ば図22に 示 す 黛家"の 図 形 で
は,ま ず始 め に そ れ を 方 眼紙 に描 く。 その 座
標 系 は利 用 者 が 自 由 に設 定 で き る右 手 系 の ワ
ー ル ド座 標 系 で あ る。座標 の範囲は左 下隅 を
図23屋 根 の 座 標(0,0),右
上 隅 を(60,50)と
す る。 こ の
領 域 に描 い た 図形 の座 標 は,次 に示 す 一 筆 書
き 方 式 の も とでBASICのDATA文
に保 存
す る。 これ を図23に 示 す 屋 根 の 部 分 を例 に と
っ て説 明 す る。
屋 根 を描 く こ とは,屋 根 の 輪 郭 を引 き,色
を塗 る こ とで あ る。 輪郭 を引 く開 始 点 を屋 根
の 頂 点 と す れ ば,ま
ず ペ ン を 持 ち 上 げ
(up),点P、 へ 移 動 させ る。これ はUPOINT
サ ブル ー チ ン で行 う こ とが で き る。 次 にペ ン
を降 して(do㎜),点P1→P2→P3の
順 に一
筆 書 きで 線 を引 く。 これ はULINEサ
ブ ル ー
チ ンで 行 う こ とが で き る。色 塗 りは 点P4の 座
標 をUPAINTサ
ブ ル ー チ ン に与 えて 行 う。
これ で 屋 根 が 完 成 す る。
この 操 作 に お い て必 要 な 図 形 デ ー タ は,線
を引 く こ とに関 して は,
・ペ ンをupに 移 動 かdownに 移 動 か の情報
・ペ ン移 動 先 の座 標 デ ー タ
・ペ ンで描 くと きの 線 の色 コ ー ド
で あ り,色 塗 りに 関 して は,
・色 塗 り指 示 の た め の 情 報
・色 塗 りの た め の座 標 デ ー タ
・領 域 内 を塗 る色 コー ド
で あ る。 し たが っ て この2種 類 の デー タ を次
の よ う に整 理 してDATA文
に保 存 す る。
DATA機
能 コー ド,x座 標,y座 標,色 コー ド
こ こで"機 能 コ ー ド"と は,次 の通 りで あ る。
リ ス ト6 7000,******************************************************零 7010,*PCTURサ フNル ーチン* 7020,******************************************************塞 7030*PCTUR 7040RESTORE 7050READGFLG,X,Y,COL 7060GOSUB*COCNV:X=XX:Y=YY 70701FGFLG=OTHENGOTO7120 70801FGFLG=1THENGOSUB*UPOINT:N=O:N=N+1:PX(N)=X:PY(N)=Y 70901FGFLG=2THENGOSUB*ULINE:N=N+1:PX(N)=X:PY(N)=Y 71001FGFLG=3THENGOSUB*UPAINT:N=0 7].10GOTU7050 7120RETURN 表2PCTURサ プル ー チ ン の 仕 様 サ プ ルー チ ン 名 引 数 と な る変 数 ・配 列 セ ッ トす る図 形 情 報 ●COCNVサ ブ ル ー チ ン で用 い られ る配 列 を使用 TA(1トTA(5) 変換 の種類 TB(1)∼TB(5) 変換 の嘲 に関する情報 PCTUR TC(1トTC(5) 変換 のッ軸に関する情報 ●DATA文 を使 用 1番 目 . 機 能 コー ド ■ 2番 目 図 形 の ワー ル 梅 座 標 3番 目 図 形 の ワー ル ド脛 標 4番 目 線 の色 コー ド 図24パ ン ダ の 原 図
リ ス ト7 8000,******************************************零************ 8010,*スMケ イ テ 噛 一 タ* 8020,*********家************零*********************零*零******** 8030,一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一・ リ ン カ クo・ 一一 一 一 8040DATA1,30,00,7,2,36,00,7,2,38,02,7 8050DATA2,40,03,7,2,54,07,7,2,66,16,7 8"060DATA2,70,24,7,2,70,30,?,-2,63,43,7 8070DATA2,60,50,7,2,56,60,7,2,49,69,7 8080DATA2,42,75,7,2,33,77,7,2,26,75,7 8090DATA2,14,67,7,2,09,57,7,2,03,41,7 8100DATA2,00,23,7,2,03,14,7,2,12,07,7 8110DATA2,23,05,7,2,25,04,7,2,30,00,7 8120DATA3,30,20,7 8130,一 一 一 一 一 一 ・一一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 ・一一 ・一一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 ヒ タ,リ ミ ミ ー-8140DATA1,56,60,0,2,63,70,0,2,64,72,0 8150DATA2,63,75,0,2,59,80,0,2,53,78,0 8160DATA2,49,69,0,2,48,67,0,2,53,60,0 8170DATA2,56,60,0 8180DATA3,60,70,0 8190,一 一 一 一 一 一一 一一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 ・一一 一"一一 ミ キ ゜ ミ ミ ー 一 一 8200DATA1,15,64,0,2,14,67,0,2,09,75,0 8210DATA2,06,74,0,2,02,67,0,2,02,63,0 8220DATA2,09,57,0,2,11,57,0,2,15,64,0 8230DATA3,10,60,0 8240,一 一謄一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 ・一一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 ヒ タMリ メ ー 一 一 8.250DATA1,44,21,0,2,46,20,0,2,49,22,0 8260DATA2,50,27,0,2,47,33,0,2,43,36,0 8270DATA2,39,34,0,2,38,31,0,2,44,21,0 8280RATA3,40,30,0 8290,一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 ・一一 一 一 一 一 一 一・一 一 一 一 一 ・一一 ・一一 一 一 一 一_ミ キMメ___-8300DATA1,22,21,0,2,2fi,27,0,2,27,31,0 8310DATA2,24,36,0,2,18,32,0,2,15,27,0 8320DATA2,19,21,0,2,22,21,0 8330DATA3,20,30,0 8340,一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 。 一 一 一 一 一 一 一 一 一 一 一 一 一__________ハ ナ ー___一__ 8350DATA1,26,18,0,2,29,14,0,2,32,13,0 8360DATA2,36,15,0,2, ,3.9,18,0,2,26,18,0 8370DATA3,35,16,0 8380,一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一 一__一 一___.__ク チ_______ 8390DATA1,25,10,0,2,27,08,0,2,29,08,0 8400DATA2 .,31,09,0,2,33,09,0,2,36,08,0 8410.DATA2,38,09,0,2,0,10,0 8420DムTAO,00rOO,0 リ ス ト8 1000,**********家*家***********象**************************家*** 1010,*メ イ ン フ゜ ロ クMラ ム* 1020,***************象*****.********************‡************* 1030SCREEN3,0:CONSOLE 0,1:CLS3 1040WX1=-175:WY1=200:WX2=175:WY2=-2003GOSUB*UWINDOW 1050SX1=144:SY1=O:SX2=494:SY2=399:GOSUB*UVIEW
1060DIMPX(100),PY(100) 1070N=5:X=O:Y=O:COL=,2 1080PX(1)=WX1:PY(1)=WY1 1090PX(2)=WXltPY(2)=WY2 1100PX(3)=WX2:PY(3)=WY2 1110PX(4)=WX2PY(4》=WY1 1120PX(5)=WX1:PY(5)=WY1 1130GOSUB*UPAINT 1140'一 一 一一一一一一 一一一一一一一=… 一一一一一 一一一一 1150TA(1)=1:TB(1)=-35:TC(1)=-40 1160TA《2)=5:TB(2)=330:TC(2》 ニ0 1170TA(3)=2:TB(3)=1:TC(3)=1 1180TA(4)=1:TB(4)=150:TC(4)=105 1190GOSUB*PCTUR 1200TA(1)=1:TB(1)=-35:TC(1)=-40 1210TA(2)=5:TB(2)=30:TC(2)=0 1220TA(3》=2TB(3)=1TC(3》=1 1230TA(4)=1:TB(4)=-150:TC(4)=105 1240GOSUB*PCTUR 1250TA《1・)=1TB(1》=-35TC(1)=-40 1260TA(2)=5:TB(2)=0:TC(2)=0 1270TA(3)=2:TB(3)=2.6:TC(3)=2.6 1280TA(4)=1:TB(4)=0:TC(4)=-65 1290GOSUB*PCTUR 1300END 1:ペ ンupで 移 動 2:ペ ンdo㎜ で 移 動 3:色 を 塗 る 上 記 の 規 則 を 利 用 し て,屋 根 の 図 形 デ ー タ は 次 の よ う に 定 義 さ れ る 。 DATA1,30,50,0 DATA2,0,30,2 DATA2,60,30,2 DATA2,30,50,2 DATA3,30,40,2 こ の 方 式 を 用 い る と,原 理 的 に ど の よ う な 図 形 で も 描 く こ とが 可 能 と な る 。 4.2図 形 描 画 サ ブ ル ー チ ン 図 形 デ ー タ を 読 み 出 し て 描 画 す る サ ブ ル ー チ ン は 次 の よ う に 作 成 す る 。READ文 で 読 み 出 さ れ た デ ー タ は 機 能 コ ー ド に よ っ て,u POINT,ULINE,UPAINTの 各 サ ブ ル ー チ ン に 振 り分 け る よ う に す る 。 機 能 コ ー ドが 0で あ れ ば,図 形 デ ー タ の 読 み 出 し は 中 止 す る 。
この よ うな サ ブ ル ー チ ン を リス ト6に 示 す 。
サ ブ ル ー チ ンPCTURの
行 番 号6060に 記 述
さ れ たCOCNVル
ー チ ン は リス ト4に 示 し
た幾 何 変 換 サ ブ ル ー チ ンで あ る。幾 何 変換 は
READで
読 み 出 さ れ た1件1件
の 図 形 デ ー
タ に対 して行 わ れ る。 な お表2に
サ ブ ル ー チ
ンPCTURの
引 数 につ い て 示 す 。
5.お
わ り に … … パ ン ダ の 描 画
サ ブ ル ー チ ンPCTURを 用 い て 自 由 な 図 形 を 描 い て み る 。 こ の た め に は,こ れ ま で に 作 成 し た 基 礎 作 画 ル ー チ ン と イ ン ター フ ェー ス ・ ル ー チ ン を す べ て 必 要 とす る 。 描 く図 形 は 図 24(7)に示 す パ ン ダ の 顔 で あ る 。 こ の 図 か ら73 点 の 座 標 を 読 み 取 り,そ れ を 図 形 デ ー タ と し てDATA文 に 登 録 す る 。そ れ を リス ト7に 示 す 。 パ ン ダ を 描 くメ イ ン プ ロ グ ラ ム を リ ス ト8 に 示 す 。 行 番 号1040と1050で ウ ィ ン ド ウ と ビ ュ ー ポ ー ト を 定 義 し,行 番 号1130で ビ ュ ー ポ一 ト領 域 を 赤 色 と し ,行 番 号1190,1240,1290 で パ ン ダ の 顔 を3つ 描 く。 そ の 結 果 を 図25の 写 真 に 示 す 。3つ の パ ン ダ の 顔 の う ち2つ は 拡 大 率 が 異 な り,上 部 の2つ の 小 さ な 顔 は,そ れ ぞ れ 左 右30° 回 転 して い る 。ま た そ の2つ の 顔 は ビ ュ ー ポ ー トの 境 界 で ク リッ ピ ン グ さ れ て い る 。 こ の パ ン ダ の 図 形 デ ー タ は サ ブ ル ー チ ン PCTURか ら 処 理 さ れ 始 め,ソ フ トウ ェ ア 命 令 と し て の イ ン タ ー フ ェ ー ス ・ル ー チ ン お よ び 基 礎 作 画 ル ー チ ン を経 由 し な が ら, ・ウ ィ ン ド ウ ー ビ ュ ー ポ ー ト変 換 ・ク リ ッ ピ ン グ ・幾 何 変 換 等 の 操 作 が 行 わ れ,最 終 的 に は 唯 一 の ハ ー ド ウ ェア 命 令 で あ るPSET文 に ょ る コン トロ ー ル の もと で,ピ クセ ル(点)と して 発 光 し て 図 形 とし て 現 れ る の で あ る 。この 過 程 を 図26の 流 れ 図 に 示 す 。この こ とか ら ラス タ ー グ ラ フ ィツ彳に お いて は,「図 形 描 画 の 基 本1ま点 で あ る 」 と い う 基 本 原 理 を 改 め て 認 識 す る こ とが で き る 。 な お,最 後 に 付 録 と し て,本 稿 で 分 割 し て 示 し た プ ロ グ ラ ム を ま と め て 掲 載 し て お く。 *** 本 稿 は 拙 書(1)に 掲 載 し た 内 容 の 一 部 分 を論'
文 形 式 に要 約 ・整 理 して,昭 和61年 度 文 教 大
学 情 報 学 部 共 同研 究 の報 告 と した もの で あ る。
内 容 の 部 分 的 利 用 を御 了解 下 さ っ た啓 学 出版
の 野 沢 裕 氏,お
よび 本稿 の 紀 要 へ の 掲 載 を御
許 可 下 さ っ た 同大 学 情 報 学 部 紀 要 員 会 に感 謝
致 し ます 。
参 考 文 献 (1)広 内 哲 夫 著 『コ ン ピ ュ ー タ ・グ ラ フ ィ ッ ク ス ー〈)G 理 論 の 展 開 と応 用 一 』,啓 学 出 版,1987。 (2)D.F。 ロ ジ ャ ー ズ,山 口 富 士 夫 監 修,セ イ コー 電 子 工 業 訳 『実 践 コ ン ピ ュ ー タ ・グ ラ フ ィ ッ ク ス ー 基 礎 手 続 き と応 用 一 』,日 刊 工 業 新 聞 社,1987。 (3)RA.プ ラ ス トッ ク,G.カ レ イ 著,郡 山 彬 訳 『コ ン ピ ュ ー タ グ ラ フ ィ ッ ク ス 』,マ グ ロ ウ ヒ ル ブ ッ ク, 19870 (4)佐 藤 義 雄 著 『入 門 グ ラ フ ィ ッ ク ス 』,ア ス キ ー 出 版 局,1984。 (5)山 口 富 士 夫 著 『コ ン ピ ュ ー タ デ ィ ス プ レ イ に よ る 図 形 処 理 工 学 』,日 刊 工 業 新 聞 社,1981。 (6)広 内 哲 夫 著 『プ ロ グ ラ ミ ン グ 言 語BASIC』,啓 学 出 版,1987。 (7)パ ン ダ の 図 形 は,山 下 勇 三 氏 制 作 の 『上 野 動 物 園 パ ン ダ の 名 前 募 集 ポ ス タ ー 』 の 中 の 図 柄 の 一 部 を, 同 氏 の 御 厚 意 に よ り利 用 さ せ て 頂 い た 。1000 1010 1020 1030 1040 1050 1060 1070 1:1 1090 1100 1110 1.120 1130 1140 図26サ ブ ル ー チ ン 間 の 関 係 付 録 ,*******************象*********‡************************* ,*メ イン フ゜ ロクMラ ム* ,*****家*零 零*******象******************零******************* SCREEN3,0:CONSOLE O,1:CL53 WX1=-175:WY1=200:WX2=175:WY2=-200:GOSUB*UWINDOW SX1=144:SY1=O:SX2=494:SY2=399:GOSUB*UVIEW
ゴ
DIMPX(100),PY(100) N=5:X=O:Y=O:COL=2 PX(1)=WX1:PY(1)=WYl PX(2)=WX1:PY(2」=WY2 PX(3)=WX2:PY(3)=WY2 PX(4)=WX2:PY(4)=WYl PX(5)=WX1:PY(5)=WY1 ¶GOSUB*UPAINT ,1150TA《1》=1TB(1》=-35TC(1)3'-40 1160TA(2)=5:TB(2)=330:TC(2)=0 1170TA(3)=2:TB(3)=1:TC(3)=1 1180TA(4)=1:TB(4)=150:TC(4)=105 11.90GOSUB*PCTUR 1200TA(1)=1:TB(1)=-35:TC(1)=-40 」210TA《2)=5TB《2》=30:TC《2)=0 122QTA(3)=2:TB(3)=1:TC(3)=1 1.230TA(4)=1:TB(4)=-150:TC(4)=.105 1240GOSUB*PCTUR 1250TA(1)=1:TB(1)=-35:TC(1)=-40 1260TA(2)=5:TB(2)=0:TC(2)=0 1270TA(3)=2:TB(3)=2.6:'TC(3)=2.6 1280TA(4)=1:TB(4)=0:TC(4)=-65 1290GO8UB*PCTUR 1300END 2000,**************************欺 象‡零*********零****家***零****** 2010,*DDAサ フMル ーチン* 2020,***零**象*‡********************象 零*******象 家****家********** 2030*DDA 2040DEFINTI 20501×1=X1:IY1=Y1:IX2=X2:IY2=Y2 20601DX=IX2-IX1:IDY=IY2-IYI. 20701A=ABS(IDX):IB=ABS(IDY) 20801X=IX1:IY=IY1 20901FIA>=IBTHENGOTO2110ELSEGOTO2190 2100,一 一一一一一 一一一一 一一一一 一一一一 一一一一 一一一一一 一一一 一鱒鱒一 一一一一 一一一一 一一一一 一椰一崩 幽6一 一 印嘗 21101E=-ABS(IDX) 2120PSET(IX,IY),COL 21301FIX=IX2THENGOTO2260 21401X=IX+SGN(IDX) 21501E=IE+2*IB 21601FIE>=OTHENIY=IY+SGN(IDY):IE=IE-2*IA 2170GOTO2120 2180'一 一一一 一一一一 一一一一 一一一一一 一一一 一一一一 一一一一 一一一一 一一一一 一一一一 一一一一 一一一 一一一一 一一一一 21901E=-ABS(IDY) 2200PSET(IX,IY),COL 22101FIY=IY2THENGOTO2260 222 .OIY=IY+SGN(IDY) 22301E=IE+2*IA 22401FIE>=OTHENIX=IX+SGN(IDX):IE=IE-2*IB 2250GOTO2200 2260DEFSNGI 2270RETURN 3000,********************象*********家**零***零**零************** 3010,*XPAINTサ フ噛ル ーチ ン* 3020,*********家***********‡*取**象*零**零*****零*象***象****零***象** 3030*XPAINT 30401FPSW=OTHENDIMQX(20),QY(20):PSW=1 3050CY=Y 3060H=CY 3070GOSUB*GLN 30801FFLG=OTHENH=H+1+GA:GOTO3070