1. トップ
  2. 新着ニュース
  3. IT
  4. パソコン

窓辺の小石 第200回 へびつかい座ドローライン

マイナビニュース / 2025年1月24日 15時21分

そういうわけで、自力でなんとか動くモノを作るしか方法がなかった。いきなり機械語は難しいのと、デバッグ、評価が困難になるため、まずは、BASICの整数演算と点を打つルーチンで、正しく動くアルゴリズムを作る。その後、それを機械語で実行できるようにする、という手順を踏んだ。まともに動く機械語のコードを書くのに1週間ぐらいは費やしたと記憶する。

Microsoft BASICだと、BASICインタプリタ内の描画ルーチンや演算ルーチンを呼び出すという手もある。しかし、当時のシャープのBASICは、サブルーチンの前に作業領域を取っていたため、インタプリタが動作中に呼び出すと、作業領域を書き換えてしまう可能性があった。また、そもそもグラフィックス関係のステートメントがなかった。

今では、ちょっと検索すると、簡単にコードが見つかる。たとえば、2点間に線を引きたいのであれば、「ブレゼンハムのアルゴリズム」が見つかる。

線を引くことができれば、それを使って矩形を描画できる。また、同じブレゼンハムのアルゴリズムを使って、円を描画させることも可能だ(写真01)。

以前紹介したSixelグラフィックスと組み合わせたものが、(リスト01)である。このPowerShellプログラムは、単純に点を打ちたい座標と描画色を出力する(写真02)。描画コマンド(Plot-SixelArray)は、3つの整数(X、Y、C)を受け取って、座標(X,Y)に色Cで描画するように作る。実際のプログラムを筆者のGitHubに置いてある。

■リスト01

function Global:Line {
param(
[int]$x0,
[int]$y0,
[int]$x1,
[int]$y1,
[int]$c
)
$dx = [math]::Abs($x1 - $x0)
$dy = [math]::Abs($y1 - $y0)
$sx=0
$sy=0
if($x0 -lt $x1) { $sx=1} else {$sx=-1}
if($y0 -lt $y1) { $sy=1} else {$sy=-1}
$err = $dx - $dy
do{
Write-Output (,@($x0,$y0,$c))
if( ($x0 -eq $x1) -and ($y0 -eq $y1)) { break }
$e2=2 * $err
if($e2 -gt -1*$dy) {
$err -= $dy
$x0 += $sx
}
if($e2 -lt $dx){
$err += $dx
$y0 += $sy
}
}
while($true)
}

タイトルネタは、ジョン・ヴァーリイ(John Varley)の「へびつかい座ホットライン」(The Ophiuchi Hotline,1977)である。1970年台後半、SFの方向が変わったと感じた。本書や「星を継ぐもの」(J.P.ホーガン。1977年)など、ストーリーの緻密さや表現技法など小説としての完成度が、一段階上がった感じがした。
(塩田紳二)



この記事に関連するニュース

トピックスRSS

ランキング

記事ミッション中・・・

10秒滞在

記事にリアクションする

記事ミッション中・・・

10秒滞在

記事にリアクションする

デイリー: 参加する
ウィークリー: 参加する
マンスリー: 参加する
10秒滞在

記事にリアクションする

次の記事を探す

エラーが発生しました

ページを再読み込みして
ください