光線を混ぜて白色光を作る加法混色、 光の吸収媒体を重ねることにより黒色を作る減法混色がある。
色光の三原色は、赤、青、緑。色光の混色は同時加法混色という。
位置加法混色は、モザイクのようなもの。コマ回しによる色の混ぜ方を継時加法 混色といい、これらは中間加法混色と呼ぶ。
色料の三原色は、cyan、yellow、magenda。CYMK と呼ばれる。K は黒。 原理的には全ての混色で作ることができるが、黒のみの方が仕上がりがきれいなため。
カラー写真、プリンタなどの、インクを加えることにより、吸収される光線が 多くなることにより暗く見えるような混色方法。
Gimp で三色混合を描こう。透明のレイヤーで基本の三原色の円を作り、重ねておく。
加法混色では、黒の背景でレイヤーでモードを加算とする。
減法混色では、白の背景でレイヤーでモードを減算とする。
TGIF の obj ファイルを解析しよう。 円に点を書き、0, 90, 180, ... などと入力し、 何が異なるか調べてみよう。
絵を書いたり写真を加工したりロゴを作成するのに使う Gimp であるが、 画面の取りこみもできる。
計算機上の Window を取りこむことができる。
ファイル -- 取りこみ -- 画像取りこみ
窓を選んで、3 秒後くらいにセットし、カーソルが十字になったら必要な Window をクリック。
画像の上でクリックし、「レイヤー、チャンネル、パス」 を出す。
ウィンドウで新規を開く。名前を変更しておくとあとあと整頓に便利。
絵の上にそのまま書きこむ。 新規のレイヤの上に書きこまれる。
拡張 - Script-Fu - ユーティリティ - グラデーション
で作成。文字や線を乗せる。
隣接領域の選択を解除してから、ペンを選んでシフト + クリックで決定。
以下のようなコードで obj ファイルで読んでみよう。
while line = gets if /^\s+\"(\S\d+\S+)\"\)\]\)/ =~ line trans = $1 puts eval "\"#{trans}\"" end end
Tgif のファイルを読み出して書き出すには、 このような方法がある。 ちなみにファイルは
Ruby 1.9 以降からは素数を扱うライブラリが mathn から独立した。
ライブラリを使って素数を出すプログラム と、ライブラリを使わない方法と、 かかる時間を比較することができる。
% time プログラム
RSA 暗号の方法は、公開暗号鍵で文字コード列を暗号化し、 復号鍵で復号する。それらを作るため、 2 つの素数 (p, q) を選び、公開暗号鍵と復号鍵を同時に生成する。
公開暗号鍵と復号鍵を作るために、法則を発見してみる。
暗号地図プログラム を動かしてみる。 公開鍵で暗号化するプログラム を動かしてみる。 復号化するプログラム を動かしてみる。
p = 3, q = 7 の素数の場合で以降考える。公開鍵を s = 5, 平文を "10 9 2 18" とする。
^ 1 ^ 2 ^ 3 ^ 4 ^ 5 ^ 6 ^ 7 ^ 8 ^ 9 ^10 ^11 ^12 ^13
---------------------------------------------------------
d= 1| 1 1 1 1 1 1 1 1 1 1 1 1 1
d= 2| 2 4 8 16 11 1 2 4 8 16 11 1 2
d= 3| 3 9 6 18 12 15 3 9 6 18 12 15 3
d= 4| 4 16 1 4 16 1 4 16 1 4 16 1 4
d= 5| 5 4 20 16 17 1 5 4 20 16 17 1 5
d= 6| 6 15 6 15 6 15 6 15 6 15 6 15 6
d= 7| 7 7 7 7 7 7 7 7 7 7 7 7 7
d= 8| 8 1 8 1 8 1 8 1 8 1 8 1 8
d= 9| 9 18 15 9 18 15 9 18 15 9 18 15 9
d=10| 10 16 13 4 19 1 10 16 13 4 19 1 10
d=11| 11 16 8 4 2 1 11 16 8 4 2 1 11
d=12| 12 18 6 9 3 15 12 18 6 9 3 15 12
d=13| 13 1 13 1 13 1 13 1 13 1 13 1 13
d=14| 14 7 14 7 14 7 14 7 14 7 14 7 14
d=15| 15 15 15 15 15 15 15 15 15 15 15 15 15
d=16| 16 4 1 16 4 1 16 4 1 16 4 1 16
d=17| 17 16 20 4 5 1 17 16 20 4 5 1 17
d=18| 18 9 15 18 9 15 18 9 15 18 9 15 18
d=19| 19 4 13 16 10 1 19 4 13 16 10 1 19
d=20| 20 1 20 1 20 1 20 1 20 1 20 1 20
暗号化プログラムより、 暗号化した文は "19 18 11 9" と得られた。
復号化プログラムより、復号する秘密鍵は d = 5 となり、 復号できることがわかる。
メールに使用する規格は RSA-2048 と呼ばれ、素数は 2048 ビット (log 2 * 2048 ∼ 617 桁) のものを使用している。 スーパーコンピュータで複数年かけて、2009 年には 768 ビット (log 2 * 768 ∼ 232 桁) の素因数分解ができた。
一般に、2 つの素数から作られた法と公開鍵の数が分かっていても、 素数の組み合せを探すアルゴリズムがはしらみつぶしの方法しか知られていないため、 素数の数が大きくなればなるほど破ることが難しくなる。
素因数分解のプログラム を利用して、 2 つの素数から作られている素因数を分解するのにかかる時間を求めよう。2 つの素数の素因数分解にかかる時間を桁ごとに求め、 gnuplot を使ってグラフで表現せよ。
微分の式を書いてみよう。Taylor 展開の式も書いてみよう。
dtd_taylor.rb を作成し、ラジアンの値を次々にいれ、 右辺と左辺がどれだけ異なるか、調べてみよう。
Calc でも同じように調べてみよう。
R, Maple ほどのパワーはないが、テンソル算もできる maxima を使ってみよう。
起動は
% maxima
実行文のあとは ; をつける。
微分、定積分の n, a, b は省略可。それぞれ 1 階微分、不定積分になる。
Wolfram alpha 等数値計算ソフトと同様、expand( % ); をすると、 さらに計算を簡単化できるか展開を試みる。
定数は %pi 等、%をつけてあらわす。
rombergtol の値を小さくすると、精度があがる。
rombergtol: 1.e-6
quit(); で終了
計算式が実行されず帰って来る場合は、解析的に解くことができず、 数値計算できない場合である。
Maxima を使うと、 f(z)=1/sqrt( 2 * %pi) * exp^(-1 * z^2 / 2); romberg(f(z),z,0,0.4);
本体の左下の赤と黄色のところがグラデーションである。 グラデーションを作成するにはどうしたらよいか、調べてみよう。
グラデーションエディタというものを使う。 色彩や明度のグラデーションを自分で作ってみよう。
できあがったファイルは、POV-Ray 形式で保存ができる。 このファイルはどのようなものになっているか、見てみよう。
Scytale (木棒暗号) と呼ばれるもの。 暗号を渡す側と受け取る側では同じ太さの棒を持っている。 長いテープを使者に渡す。 長いテープを棒に巻きつけることによって、解読した。
Caesar 暗号。 暗号を渡す側と受け取る側でアルファベットを何文字ずらすかを決めてある。 暗号化された手紙を受け取ることができる。