SVX日記

2004|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|

2017-02-24(Fri) プログラミングフライデー

  プログラミングフライデーとは

  個人が幸せや楽しさを感じられるプログラミング(純粋に興味を満たす、生活を便利にする等)や、そのための時間の創出を促すことで、

  1. 充実感・満足感を実感できる生活スタイルの変革への機会になる
  2. プログラミング能力の強化や知的好奇心の充足につながる
  3. (単に消費するだけではなく)創造する人間へと傾向を変えていくきっかけとなる

  といった効果につなげていく取り組みです。

  ……なんてのは、オイラの勝手な取り組みだ。別にプレミアムフライデーも悪くない取り組みだとは思っているけど。

  と、別に今日完成させたわけではないのだが、ちょっと前から「30年前から気になっていたmz-2000のデモ画面の3DCG」の再現に取り組んでおり、無事描画に成功したのでプログラムリストと併せて公開しておく。

  オリジナルのデモ画面は、シャープのガラパゴスストアのレトロ家電カタログで見ることができる。3種類とも基本的にはコブの数が違うだけだ。

  問題は「陰面処理」だ。以前からどうやっているのか気になっていたのだが、ポンとヒラメいたら簡単な話だった。たった1行の追加でできてしまう。当時、この図案を考えた人は尊敬するなぁ。

  画像の説明

     (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)
         }
     }

  3Dグラフィックボードがなくったって、浮動小数点演算コプロセッサがなくったって、こちとらにはZ80Aの4百万Hzの計算能力と、溢れ出さんばかりの創造力があるんだからッ! 負けてらんないのよーッ! OpenGLなんかにーッ!