Sunday, March 18, 2012

プチコンでいろんな円を描いてみる

とあるMSXのプログラムに、小さい円〜大きい円をグラフィック画面に描き、それをスプライトに定義するものがありました。

移植しようとしてプチコンでGCIRCLEしてみると、MSXとは見た目と異なる円ができ、半径=0のときは何も描かれません。

半径0はまあよいとして、見た目が大幅に違うのはいまいち。興味もあり、自前で円を描いてみることにしました。

調べてみると、アルゴリズムが何個も。 今回確認したのは以下:
  1. プチコンのGCIRCLE
  2. 微分/SOFTIST:円、楕円の描画(アルゴリズム) (一番遅い)
  3. 三角関数(すべての角度について、x=x0+r*cos(a)、y=y0+r*sin(a))三角関数
  4. ブレゼンハム(Bresenham)の円描画/伝説のお茶の間 No007-09(1) 円の描画(1) MichenerとBresenham
  5. ミッチェナー(Michener)の円描画/Comparing Circle Drawing Algorithms
  6. ピタゴラスの定理(x^2+y^2=r^2)/Comparing Circle Drawing Algorithms
  7. ブレゼンハム 中点分岐を用いた円描画アルゴリズム/伝説のお茶の間 No007-09(1) 円の描画(1) MichenerとBresenham
  8. ピタゴラスの定理(値のより近いピクセルを選択する方式)/Comparing Circle Drawing Algorithms
  9. 直径の長さが正しくなる円描画/伝説のお茶の間 No007-10 円描画(2)
プチコンで実装してみた図。
横は左から半径0〜9。縦はアルゴリズム

MSXで円を描いてみる。
MSXのプログラム
MSXでの実行結果(FS-A1WX)

これだけやって、MSXとぴったりなのはなし。どうも8.(ビタゴラ2)が近いようなのでこれを採用。半径0は補正すればそっくりになるかも?
(プチコンのGCIRCLEとおなじものもなし。。3.(SIN/COS)の四捨五入版が近いかも)

どうしても自前で円を描画したい、という人はそういないとおもいますが、記録のためQRコード。



Saturday, March 17, 2012

プチコンでラスタースクロール

sin関数を利用して画像を変形させる擬似ラスタースクロールです。
プチコンmkIIのお勉強のために、強化されたグラフィック機能で遊んでみました。
mkIIは速い。画像は使い回し。

画像だけにしようかとおもいましたが、実際に動いている方が分かりやすいですね。
RASTER 1/1枚

こんなことが簡単にできるようになるなんて、隔世の感があります。

画面をはみ出すようなラスタースクロールを見てると、Xak-ガゼルの塔-のオープニングを思い出します。。ちょっとしたいい年ですね。

「MSX」はMSXライセンシングコーポレーションの登録商標です。

プチコンmkIIのgcopyバグ?

gcopyで遊んでいると、思い通りにいかない場合があった。 
転送先のx座標が0のときにgcopyがうまくいかないっぽい。
以下、検証用のリスト。
---
GCOLOR 15
GPAGE 0,1,1:GCLS 0
GLINE 0,0,255,192
GPAGE 0,0,0:GCLS 0
GCOPY 1,0,0,255,192,0,0,FALSE
---
QRコードに変換する気力はなかった。。

 裏画面(PAGE1)に描いた斜め線が表画面(PAGE0)にコピーされてほしいのに、コピーされない。 転送先のx座標を1にすると、コピーされる。 ???

いろいろやってみると、どうも転送元のx,y座標と転送先のx,y座標が一致しているとだめらしい。上記リストで
  • GCOPY 1,1,0,255,192,0,0,FALSE
  • GCOPY 1,0,1,255,192,0,0,FALSE
  • GCOPY 1,1,1,255,192,0,0,FALSE

はいずれもコピーされる。

(追記)
なんでそうなるか想像してみた。
同じページ間で転送元座標=転送先座標の場合は、転送してもしなくても結果は同じ(むしろ重なっていると何かおこるかも??)なので転送を省略してるような気がする。このとき、異なるページ間の転送かどうかの考慮が入っていない。。。のかもしれない。

Friday, March 16, 2012

プチコンに時刻をしゃべらせた!

mkII発売記念。 つくってあったTALKTIMEを動かしてみた。
これでしゃべる時計を買わずにすむ!
  
QRコード
1
2

データの打ち込みがメンドウだったので、プログラムで20〜59の日本語を生成してますが、かえって何してるか分かりにくいプログラムに。素直に作ればよかった。

バグを直したり、しゃべってる間は表示を止めたり、ちょっとだけ手を入れてます。

Sunday, March 11, 2012

プチコンで時刻をしゃべらせる?

mkII正式発表記念で作成(2012/2/26ごろ)。

Aボタンか下画面をタッチすると、現在時刻を音声合成で教えてくれる(はず)です。 プチコンv1.2以下ではTALK文はエラーになるので、時刻の日本語を画面に表示します。

プチコンv1.2以下かMKIIかをVERSION変数で判定できると想定して作っているので、そうなるといいなぁ。
具体的には「システム変数VERSION<=4192なら、mkIIではない」と考えています。

(今のところ、動くかどうか分かりません)

(2012/3/9)プチコンmkIIのコマンド一覧公開!
これをを見る限り、大丈夫そうですが。。。