gimp の復習

光線を混ぜて白色光を作る加法混色、 光の吸収媒体を重ねることにより黒色を作る減法混色がある。

加法混色

色光の三原色は、赤、青、緑。色光の混色は同時加法混色という。

位置加法混色は、モザイクのようなもの。コマ回しによる色の混ぜ方を継時加法 混色といい、これらは中間加法混色と呼ぶ。

加法混色を体験してみよう

減法混色

色料の三原色は、cyan、yellow、magenda。CYMK と呼ばれる。K は黒。 原理的には全ての混色で作ることができるが、黒のみの方が仕上がりがきれいなため。

カラー写真、プリンタなどの、インクを加えることにより、吸収される光線が 多くなることにより暗く見えるような混色方法。

減法混色を体験してみよう

Gimp で三色混合を描こう。透明のレイヤーで基本の三原色の円を作り、重ねておく。

加法混色では、黒の背景でレイヤーでモードを加算とする。

減法混色では、白の背景でレイヤーでモードを減算とする。

Obj ファイルを解析して動画を作成しよう

TGIF の obj ファイルを解析しよう。 円に点を書き、0, 90, 180, ... などと入力し、 何が異なるか調べてみよう。

画像加工ソフト Gimp で画面の取りこみ

絵を書いたり写真を加工したりロゴを作成するのに使う Gimp であるが、 画面の取りこみもできる。

計算機上の Window を取りこむことができる。

ファイル -- 取りこみ -- 画像取りこみ

窓を選んで、3 秒後くらいにセットし、カーソルが十字になったら必要な Window をクリック。

Gimp のレイヤー

画像の上でクリックし、「レイヤー、チャンネル、パス」 を出す。

ウィンドウで新規を開く。名前を変更しておくとあとあと整頓に便利。

絵の上にそのまま書きこむ。 新規のレイヤの上に書きこまれる。

Gimp でグラデーション

拡張 - Script-Fu - ユーティリティ - グラデーション

で作成。文字や線を乗せる。

Gimp で線を書く

隣接領域の選択を解除してから、ペンを選んでシフト + クリックで決定。

Tgif の文字列を調べる

以下のようなコードで 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) を選び、公開暗号鍵と復号鍵を同時に生成する。

2 つの素数のべき

公開暗号鍵と復号鍵を作るために、法則を発見してみる。

  1. 素数の積を法とする 1 .. pq までの数に 1 .. pq 乗をかけたものを pq で割った余りを書き込む。( k ** l % pq, k と l は 1 .. pq までの整数)
  2. (p-1) と (q-1) の最小公倍数に 1 を加えた数ごとに 1..pq が表れるのを確認する。

暗号地図プログラム を動かしてみる。 公開鍵で暗号化するプログラム を動かしてみる。 復号化するプログラム を動かしてみる。

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 暗号の難しさ

メールに使用する規格は RSA-2048 と呼ばれ、素数は 2048 ビット (log 2 * 2048 ∼ 617 桁) のものを使用している。 スーパーコンピュータで複数年かけて、2009 年には 768 ビット (log 2 * 768 ∼ 232 桁) の素因数分解ができた。

一般に、2 つの素数から作られた法と公開鍵の数が分かっていても、 素数の組み合せを探すアルゴリズムがはしらみつぶしの方法しか知られていないため、 素数の数が大きくなればなるほど破ることが難しくなる。

素因数分解のプログラム を利用して、 2 つの素数から作られている素因数を分解するのにかかる時間を求めよう。

2 つの素数の素因数分解にかかる時間を桁ごとに求め、 gnuplot を使ってグラフで表現せよ。

微分の式

微分の式を書いてみよう。Taylor 展開の式も書いてみよう。

dtd_taylor.rb を作成し、ラジアンの値を次々にいれ、 右辺と左辺がどれだけ異なるか、調べてみよう。

Calc でも同じように調べてみよう。

LISP 言語で数値計算

R, Maple ほどのパワーはないが、テンソル算もできる maxima を使ってみよう。

起動は

% maxima

実行文のあとは ; をつける。

(n階)微分
diff
diff(f(x),x, n)
(不)定積分
integrate
integrate(f(x),x,a,b)
数値積分
romberg
romberg(f(x),x,a,b)

微分、定積分の 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 暗号。 暗号を渡す側と受け取る側でアルファベットを何文字ずらすかを決めてある。 暗号化された手紙を受け取ることができる。