« 2009年07月 | メイン | 2009年09月 »

2009年08月 アーカイブ

2009年08月02日

正20面体の頂点座標の求め方

正20面体の頂点座標を簡単に求める方法があることがわかった。


同じ長方形3枚をこのように組み合わせて、近い頂点を結ぶと、何か20面体ができる。これの長方形の長辺と短辺の比を変えていくと、2つの長方形から3点取った三角形がどこかで正三角形になる。

その時、20面体の30本の辺の長さが全て同じになるので、その時の3つの長方形の頂点が正20面体の頂点である。

長方形の短辺の長さを2、長辺の長さを2xとし、点A〜Eを

このように取ると、AE=x、ED=(x-1)なので、AD2=x2+(x-1)2であり、DC=1なので、AC2=AD2+DC2=x2+(x-1)2+1である。ABCが正三角形の時、AC=2なので、
x2+(x-1)2+1=4
が成り立ち、これを解くとx=(1+√5)/2(=黄金比)が求まる。

従って、Gを黄金比とすると、
(±1,±G,0)
(0,±1,±G)
(±G,0,±1)
の12点が、1つの正20面体の全ての頂点となる。

続きを読む "正20面体の頂点座標の求め方" »

2009年08月08日

8方向に掘り進めて迷路を作ってみる

昔、MSX-FANという雑誌に投稿されていたBASICのプログラムで、壁を8方向に掘り進めて迷路を作り、その一部分が画面に表示された状態でその中をさまようというゲームがあった。

ランダムな迷路を作る方法としては、格子状の壁を4方向に掘り進める方法はすぐに思いつく。既に掘り進めた通路のいずれかの壁をランダムに選び、その壁を取って通路が1マスだけ伸びるならその壁を取り払う(壁の向こうに既に通路があるとループができてしまうため)というのを繰り返せば良いのである。選んだ壁の向こうが未踏の地ならその壁を外す、というのを繰り返すとも言える。
他に、通路が4方向に進む迷路を作る方法としては、「棒倒し法」なる奇妙な方法があるようだが、いたずらに複雑な上にいびつな迷路になるので、取るに足りない。

しかし、雑誌に載っていたプログラムは、迷路を8方向に掘り進めた。そういうことができること自体が私にとっては不思議だった上、そのプログラムは今考えても戦慄が走る「1画面プログラム」すなわち40文字x23行に収まる激短プログラムだった。

プログラムのコードは見えていたのである。大概のプログラムは、手で打ち込んでいる内にどういう仕組みかは理解できた。理解できないのはマシン語が混ざっているものくらいだった。ALL BASICで手で打ち込んで実際に動かしてみてアルゴリズムが理解できなかったプログラムは、そのプログラムくらいしか記憶に無い。
加えて、その作者は当時の私と同じ奈良県民らしかったため、忘れられなかった。

それから約20年、そのプログラムのことを時々思い出しては、頭の中で考えて、その迷路を作る仕組みを不思議に思っていた。

昨日、またふとそのプログラムのことを思い出して、図を描いて考えてみたら、3分でわかった。

テストプログラム(Javaアプレット)の起動ページへ
ソースコード

ついでに自動的に解かせてみた。

要するに、隣り合う斜めの通路が接しないような幅で通路を掘れば良いのである。他に気を付けるのは、斜めのマスに通路を伸ばす時は直交する通路が無いことを確認することくらいで、基本的には4方向に掘り進める場合と同じように方眼のマス目を繋げていけば実現できる。

続きを読む "8方向に掘り進めて迷路を作ってみる" »

2009年08月29日

(FreeBSD)かなキー入力をするための設定

FreeBSD 7.1を使っていて、どうしても(ローマ字入力でない)かな入力をしたくなったので、設定方法を調べてみた。
以下、キーボードは日本語106キーボードを使用することを前提にする。

●X Windowの設定
まず、デフォルトの設定では、バックスラッシュキー(「ろ」キー)と¥キー(「ー」キー)のkeysymが同じでアプリの設定ではどうしようも無いため、「ろ」キーが"_"になるよう、keysymを変更する。また、Shift+0キーがShift+^キーと同じチルダ記号だと「を」キーとしての設定がうまくいかないことがあるので、Shift+0が"|"になるように変更する。

~/.Xmodmapに以下の2行を加える。

keycode 211 = underscore underscore
keycode 19 = 0 bar kana_WA kana_WO

それをすぐに反映するには、次のコマンドを実行する。

xmodmap ~/.Xmodmap

おかしい時は、xmodmap -pkeとして、現在の状況を確認する。

●Emacs+Anthyの場合
まず、anthy-conf.el(筆者の環境では/usr/local/share/emacs/site-lisp/anthy/にある)の「ろ」「を」「ー」キーの割り当てを変更する。ついでに、Shift+"["、Shift+"]"が「」(かぎ括弧)でなく{}(波括弧)になっているが、「」の方が使う機会が多いので、Shift+"["、Shift+"]"、を「」に割り当てる。


("_" . "ろ")
("|" . "を")
;;("_" . "ー")は削除
("\\" . "ー")
("{" . "「") ("}" . "」")

ひらがな用とカタカナ用の設定があるので、カタカナ用の設定も同じように変更する。

次に、~/.emacs.elに次の3行を加えるか、Emacs上でこれを実行する。

(load-library "anthy")
(anthy-kana-map-mode)
(setq default-input-method "japanese-anthy")

これでC-\でかな入力ができるようになる。

日本語入力切り替えキーとしてC-\が使えない時は、Canna流にC-oを割り当てる。

(global-set-key "\C-o" 'anthy-mode)

●Emacs+Cannaの場合
(1) default.canna(筆者の環境では/usr/local/share/canna/)を~/.cannaにコピー
(2) ~/.cannaの"default.cbp"を"kana.cbp"に変更
(3) ~/.cannaのdefsymbolの行を全てコメントアウトし、以下を追加

(defsymbol
?_ "ろ" "ろ" )

(4) ~/.emacs.elに(canna)を加えて、emcwsコマンドでEmacsを起動
または、
(4') emcwsコマンドでEmacsを起動し、M-x canna
これでC-oでかな入力ができるようになる。

●jvim+Cannaの場合
jvimは、DIRECT_CANNAを有効にしたもの(ONEWを無効にしたもの)をインストールすること。
packagesなら ja-jvim-direct_canna-3.0.j2.1a_2 など、"direct_canna"が付いたものを選択する。portsならjvimのmake configでDIRECT_CANNAを選んでからコンパイルする。

上記のEmacs+Cannaの場合と同様に~/.cannaを設定してjvimを起動すると、インサートモードにてC-\でかな入力ができるようになる。

以上、FreeBSDには限らない設定だとは思うが、他の環境では試していない。

続きを読む "(FreeBSD)かなキー入力をするための設定" »

About 2009年08月

2009年08月にブログ「Weblog on mebius.tokaichiba.jp」に投稿されたすべてのエントリーです。過去のものから新しいものへ順番に並んでいます。

前のアーカイブは2009年07月です。

次のアーカイブは2009年09月です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type 3.35