LZW 圧縮アルゴリズム

gif を生成するクラスを自作するために、今回は LZW 圧縮アルゴリズムの勉強。 LZW アルゴリズムは辞書式圧縮であり、gif や tiff の圧縮に利用されています。 LZW アルゴリズムの概要 LZW 圧縮アルゴリズムは次の手順で実行されます。  手順0: 文字(数字)列に現れる文字の種類の数だけ、それぞれ辞書に登録しておく。  (文字列が 0~255 の範囲であれば、辞書は 256 ペー…

続きを読む

最小サイズのgif画像とアニメーションgif

Java で gif アニメーションを作りたいと思い、色々と調べる過程で 最小サイズの gif 画像や gif アニメーションを作ってみたので、そのメモ。 以前はJavaのクラスでgifを書き出していましたが、 今回は gif の仕様を調べて、バイナリ出力させています。 LZW 圧縮アルゴリズムのコードを書くのはもう少し時間がかかりそうですが、 ヘッダや大まかな構造は次のページを参考になんとなく理…

続きを読む

機構シミュレータ「Mecha Mania」を公開

HDDを整理していたら、私が初めて制作したソフトウェア「Mecha Mania」が出てきました。 「Mecha Mania」は簡易的な機構のシミュレーションを行う教育用ソフトウェアで、 私が大学3年生の終わり頃から4年生の始めにかけて制作したものです。 このソフトウェアは大学の講義で一部利用されましたが、それからお蔵入りの状態でした。 せっかくなので機構学習の役に少しでも立てばと思い、公開すること…

続きを読む

コインを20000回投げて11000回以上表が出る確率

以前こちらで考察したコイン投げ試行。 もう3年以上前という現実に、切なくなります。 このような(自分にとって)直感的でない確率の問題は好きなので、もう一度考察してみます。 コインを2000回投げて1100回以上表が出る確率 まずは前回と同じ、2000回投げて1100回以上表が出る確率です。 初めてこの問題を考えたとき、直感的にはそこそこの確率で起こりそうに感じましたが、 実際には0.00038%と…

続きを読む

PrintWriterでテキストを書き出しても改行がちゃんとされない理由

久々にPrintWriterでテキストファイルの書き出しをしていたら、 PCによって正しく改行されている場合とそうでない場合がありました。 予想外につまづいてしまったので、メモ。 結果から言うと、改行を表すエスケープシーケンス ”\n” は正しく書き出されていたのに対して、それを開くエディタが対応しているかしていないかの差でした。 実際に動かそうとしたのは次のようなコードで…

続きを読む

Java で Math.floor() や Math.round() を使うとやっぱり遅い

以前 Javaとかで高速に小数点以下四捨五入をしたい で同じようなことを書きましたが、最近再び Math.round() を使っていて遅いな~と感じたので、復習を兼ねつつ、もう少し真面目に遅い原因について触れながら考察メモ。 ここでは Math.floor() と Math.round() について見ていきます。Math.floor() は、その数を超えない最大の整数を返すメソッド。Math.ro…

続きを読む