なかなかに家で作業できないのでSinテーブルの追及をまだやってたりします。
より小さく、高精度に…的な。ほんとキリがなくて
理想のSinテーブルを求めた挙句、煮詰まって変なアプリ作りました。
http://www.geocities.jp/denzeeen/denzi/sinsvg.zip
元はmac上でビルドしていますがgccをWinGWでビルドしたexeです。
★使い方はちと説明に困るとこもあるんですがたとえば
1,円周を1024に分割したSinテーブルを作りたい。
2,粗引きテーブルは16おきに
3,テーブルの精度は8bitで
としたい場合
>sinsvg 1024 16 8
とします。
※現在のところ第3パラメータは8か16のみの指定です。
そーするとこいつはprintfでこんなソースコード(1024_16_8.c)を吐きます。
http://www.geocities.jp/denzeeen/denzi/1024_16_8.txt
これは8bit長の円周1024分割Sinルーチンを含んだソースです。Deg90度で256、180度で512、360度で1024です。
ルーチンはいろんなとこにコピペして使えます。
テーブルは下記の49バイトとなりました。
なんだ最後のcosPitchは、先頭と末尾以外255って(笑)
unsigned char sinTable2pai[17] = {0,12,24,37,48,60,71,81,90,98,106,112,118,122,125,127,127};
unsigned char sinPitchTable[16] = {0,1,3,4,6,7,9,10,12,14,15,17,18,20,21,23};
unsigned char cosPitchTable[16] = {0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254};
更にこの1024_16_8.cをgccなりVisualStudioなりでビルドして実行すると
メインルーチンがこのテーブルから出すSin値を使って、こんな↓図を出すhtmlを吐きます
svgって楽ね。html5の恩恵を初めて受けた気がする。
http://www.geocities.jp/denzeeen/denzi/1024_16_8.html
この図が上記49バイトで求められるSinテーブルの全体像となります。
でも…いろいろな条件で比較してようやく納得した。
確かに精度上げればジャギが消えて本当波が綺麗になめらかーになるけど↓
http://www.geocities.jp/denzeeen/denzi/1024_32_16.html
「だいたいでいいがね、どーせPWM8bitだし、ノイズ載るし。」(名古屋弁)
http://www.geocities.jp/denzeeen/denzi/256_8_8.txt
http://www.geocities.jp/denzeeen/denzi/256_8_8.html
思い切り最小構成にて、このSinカーブを出すための「2π=256」のテーブルは
以下の25バイトです。tiny13でも余裕。
(ルーチン修正すると先頭の0棄てていけるから22バイト)
unsigned char sinTable2pai[9] = {0,24,48,71,90,106,118,125,127};
unsigned char sinPitchTable[8] = {0,6,12,18,25,31,37,43};
unsigned char cosPitchTable[8] = {0,255,255,255,254,254,253,252};
ZIPファイルをChromeでダウンロードしようとしたら
返信削除「このファイルは一般的にはダウンロードうんちゃらかんちゃら」
という警告が出ました
どんだけGoogle帝国に監視されてるんだろう(^q^;
きれいな波形は(もはや今の時代は)だれでも作れるけど
クソ波形はそんじょそこらじゃ作れないので
この波形も聞いてみたいです
実は最初GoogleDisk使ったら、アクセス数が云々ごにょごにょ云われたので、ジオシティーズにしました。ググル同士使ってもなんか不具合がおこるようです。
返信削除多分Chromeさんは、昆虫にビビるオナゴの如く、単純にexeというファイル名に警戒しているのかも。
http://www.geocities.jp/denzeeen/denzi/sinsvg_noexe.zip
よろしければこちらの中の_exeをリネームしてください。
ニーズがあるならSinテーブルを元にクソ波系を出すテーブルとルーチンを作ってみようかな(笑
返信削除