SVX日記
2017-02-24(Fri) プログラミングフライデー
個人が幸せや楽しさを感じられるプログラミング(純粋に興味を満たす、生活を便利にする等)や、そのための時間の創出を促すことで、
- 充実感・満足感を実感できる生活スタイルの変革への機会になる
- プログラミング能力の強化や知的好奇心の充足につながる
- (単に消費するだけではなく)創造する人間へと傾向を変えていくきっかけとなる
……なんてのは、オイラの勝手な取り組みだ。別にプレミアムフライデーも悪くない取り組みだとは思っているけど。
と、別に今日完成させたわけではないのだが、ちょっと前から「30年前から気になっていたmz-2000のデモ画面の3DCG」の再現に取り組んでおり、無事描画に成功したのでプログラムリストと併せて公開しておく。
オリジナルのデモ画面は、シャープのガラパゴスストアのレトロ家電カタログで見ることができる。3種類とも基本的にはコブの数が違うだけだ。
(0..360).each {|rx| x0 = 360 - rx
x0 % 3 != 0 and next
(0..360).each {|y0|
y0 % 3 != 0 and next
x = 50 + x0 + y0 * 0.5
y = 300 + y0 * 0.2 - (x0 >> 3)
h = (dcos(3 * x0) - 1) * (dcos(2 * y0) - 1) * 60 if(ARGV[0] !~ /bc/)
h = (dcos(1 * x0) - 1) * (dcos(1 * y0) - 1) * 60 if(ARGV[0] =~ /b/)
h = (dcos(3 * x0) - 1) * (dcos(3 * y0) - 1) * 60 if(ARGV[0] =~ /c/)
win.line(x, y, x, y - h, 0)
win.pset(x, y - h, 4)
}
}
さらに、新たに気になった「mz-80Bのデモ画面の3DCG」も再現してみた。中折れ帽のような複雑な形状だが、シンプルなアルゴリズムで描いているのに違いなく、これまたヒラメくまでに時間がかかった。左下の付近で「陰面処理」が微妙に破綻しているが、オリジナルのデモ画面も同様に破綻しているようなので、それでよしとしておく。
xo = 150; yo = 150
(0..300).each {|rx| x0 = 300 - rx
x0 % 3 != 0 and next
(0..300).each {|ry| y0 = 300 - ry
y0 % 3 != 0 and next
x = 50 + x0 + y0 * 0.75
y = 200 + y0 * 0.5
r = sqrt((xo - x0) ** 2 + (yo - y0) ** 2) * 1.2
h = dcos(r) * 100 + dcos(3 * r) * -30 + 100
win.line(x, y, x, y - h, 0)
win.pset(x, y - h, 4)
}
}
これはどんな言語で実装されたのでしょうか?