錯乱円径(=ボケ量?)のグラフを ggplot2 で表示する
動機
写真の話です。
写真において、ピントが合っている(とみなせる)範囲のことを、「被写界深度」と呼びます。被写界深度は、レンズの焦点距離・F値・被写体との距離・許容錯乱円径によって変わります(被写界深度 - Wikipedia)。
ピントが合っている範囲が分かるのは良いのですが、ピントが合っていない部分のボケ量も知りたい。「ピントが合っている位置からどれくらい離れたらどれくらいボケるのか」を、写真表現のためにつかみたい、と思いました。しかしその指標を見つけることはできませんでした1。
なんか指標はないかなと思っていたところ、被写界深度計算式の「許容錯乱円径」が使えそうかなと感じてきました。許容錯乱円径は許容できる錯乱円の直径のことで、錯乱円とは、ピントが合っていないものが円形にボケることを言います。これはつまりボケ量のことなのではないか? ということで、被写界深度の式を変形して、ピントからどれだけ離れると錯乱円径がどのように変わるかをグラフで見たいと思いました。
グラフ描画にはR2を使うことにしました。R でグラフを描くには ggplot2 が良いと教えてもらったので、それを使うことにしました。課題はありますが、とりあえずこれまでしたことをまとめておきたいので、記事にしています。
どんなんできたの
こんなグラフができました。X がピント合焦点からの距離(mm)、Y が錯乱円径(mm)(のはず)です。レンズの焦点距離が35mm、F値は2.8、ピントが合っている位置までの距離が 5000mm (=5m) としています。
前方:
後方:
どうやって作ったの
前方被写界深度は、
後方被写界深度は、
です( は焦点距離、 は F 値、 はレンズ面からピントが合っている位置までの距離、 は許容錯乱円径)(参考:『高校数学でわかる光とレンズ 光の性質から、幾何光学、波動光学の核心まで』(竹内 淳) / カメラの被写界深度の計算 - 高精度計算サイト)。
これを について解きます。今回はWolfram先生(Wolfram|Alpha: Computational Intelligence)にご協力をいただきました。
結果、前方においては
となり、後方においては、
となるようです。
(2019/1/5追記開始)ちなみに、 とおいたときは、
となります。これは前方においての式の結果を負の側にするだけとなりますので、下記の式で統一的に錯乱円径を示せることになるかと思います:
(2019/1/5追記終了)
これを、ggplot2 でプロットすることにします。
「正規分布など好きな関数の曲線を描きたい - Qiita」を、参考にさせていただきました。これをもとに、RConsole で以下のように入力して、上記のグラフを得ました。
前方:
> g2 <- ggplot(data=data.frame(X=c(0,4000)), aes(x=X)) > g2 <- g2 + stat_function(fun=function(x, f, F, s) - (x * f^2)/(x * F * s - F * s^2 ), args=list(f=35, F=2.8, s=5000), colour="red") > g2
後方:
> g2 <- ggplot(data=data.frame(X=c(0,4000)), aes(x=X)) > g2 <- g2 + stat_function(fun=function(x, f, F, s) (x * f^2)/(x * F * s + F * s^2 ), args=list(f=35, F=2.8, s=5000), colour="blue") > g2
を x軸とする方法は分からなかったので、x
にしています。
また、stat_function
の fun=function
部分は、function(使用する変数) 式
という書き方にするようです。使用する変数を入れず、args=list(...)
の部分のみにf=35
を記載していたので、エラー出てしまい、つまづいてしまいました。
考察
被写界深度を計算してくれるサイト(カメラの被写界深度の計算 - 高精度計算サイト)によれば、同条件で許容錯乱円径を0.03mm とした場合において、前方被写界深度は 1,276.6mm、後方被写界深度は 2,608.7mm ということで、目視ですが大体合っているように思えます。
後方よりも前方の方がピント距離からのボケ量が大きいことも分かりました。後方 2m では、錯乱円径は0.025mm ですが、前方 2m では 0.055mm となり、よりたくさんボケるようですね。
また、後方については 100m までのグラフを出してみました。以下のグラフです。
これによれば、距離が伸びても、あまり錯乱円径は広がらないようです。後景においては、一定量以上はどれだけ距離を伸ばしてもあまりボケ量は変わらない、ということかと思います。
課題
したい順に並べています。
- 変数を入力したら結果が出るようにしたい(毎回上のような入力をするのは面倒、さくっとCUIのを作れたら良いのですが)
- 前方部分と後方部分を合わせて、一つのグラフにしたい(ピントを合わせた距離から前後にどれだけボケるのかを一望したい)
- 許容錯乱円径を与えて、その線を引きたい(すぐにできそう)
- の線との交点をグラフに載せたい(被写界深度も分かってお得)
- グラフを意味明瞭にしたい("X", "Y"とか意味不明なので。簡単にできそう)
- 近似式ではない式で計算したい(現在、(焦点距離よりもピント距離の方が充分に大きい)として計算しているため)
するかどうかはわかりません。
-
なにかご存じでしたら教えて頂ければ幸甚にございます / (2019/1/5追記:ありました:フォーマットサイズによるボケ量の変化 | 五海里)↩
-
なんとなく↩
カラー図解 数学事典 p. 10-11 メモ
(追記していく予定です)
証明
証明とは、ある命題を一定の推論規則により他の書名台から導くこと:
循環論法なしにすべての命題が証明可能にならないのは明白:
よって、「公理」を使う。公理=真であると仮定して、以後の証明の根拠としてよい命題のこと。その上に種々の専門分野ができる。公理系から導出可能な命題は論理体系の選択に依存:
- 作者: Fritz Reinhardt,Heinrich Soeder,Gerd Falk,浪川幸彦,成木勇夫,長岡昇勇,林芳樹
- 出版社/メーカー: 共立出版
- 発売日: 2012/08/25
- メディア: 単行本
- クリック: 1回
- この商品を含むブログ (2件) を見る
MacTeXでLyXで日本語が使えるようになるまで
MacPortsが嫌になってHomebrewにしたので、Ports経由のtexがなくなった。代わりにMacTeXを使うことにしたが、日本語を使えるようになるまで難儀したので、覚え書き。
- MacTeXをインストールするMac - TeX Wiki
- 日本語環境を整備する(参考:Mac - TeX Wiki)。
$ sudo mkdir -p /usr/local/texlive/texmf-local/fonts/opentype/hiragino/ $ cd /usr/local/texlive/texmf-local/fonts/opentype/hiragino/ $ sudo ln -fs "/Library/Fonts/ヒラギノ明朝 Pro W3.otf" ./HiraMinPro-W3.otf $ sudo ln -fs "/Library/Fonts/ヒラギノ明朝 Pro W6.otf" ./HiraMinPro-W6.otf $ sudo ln -fs "/Library/Fonts/ヒラギノ丸ゴ Pro W4.otf" ./HiraMaruPro-W4.otf $ sudo ln -fs "/Library/Fonts/ヒラギノ角ゴ Pro W3.otf" ./HiraKakuPro-W3.otf $ sudo ln -fs "/Library/Fonts/ヒラギノ角ゴ Pro W6.otf" ./HiraKakuPro-W6.otf $ sudo ln -fs "/Library/Fonts/ヒラギノ角ゴ Std W8.otf" ./HiraKakuStd-W8.otf $ sudo mktexlsr
$ sudo updmap-sys --setoption kanjiEmbed hiragino
- LyXの設定を行う(参考:MacTeX で LyX を使う – Konno Log)
設定を行ったが、うまくいかない。多分新規インストール直後だからだろう、ということで、もう一度日本語環境整備の時に使ったページ(Mac - TeX Wiki)を参考にして、
$ sudo kanji-config-updmap-sys hiragino
とおこなったら、上手くいった。
果てだ
はてな偉大ありにツアー濃くしました!
BrettspielWeltでドミニオン メモ
準備
言語設定
- languages.txtに変更 場所は以下の通り:
- Mac: /Applications/BrettspielWelt/localized/
- Win: C:\Documents and Settings\[ユーザ名]\Application Data\BrettspielWelt\localized\(おそらく)
- Dominion=de,en の行につづけて",ja"を追加
操作等
入室
- /ghook [id](下記に説明)
- 「読み込み中...」と表示されるがしばし待つ
入室後
- 画面上部の"Game"でGameウィンドウを開いて「参加」をクリック
- 誰かが「開始」でゲームスタート
BSW内コマンド
- /ghook [id]:idの人が入っている部屋を探して入室
- /listfree dominion:dominionの空き部屋を検索
- /game [room番号]:入室
- /accept:再入室の申請等に対しての承諾
GUI上での空き部屋の検索
misc
日本語string
- http://ototorosama.com/files/Dominion.string_UTF-8
- (略)/localized/ja/strings/Dominion.string_UTF-8と置き換え
グループ分け
参考
- とりあえずすぐに BrettspielWelt でドミニオンとかしたい場合 - retlet.net:記事の大部分はここから。ありがとうございます。
- 【Amaneのbsw遊び】 ドミニオン [Dominion] ルール説明:ルールについて
- ドミニオン - peca卓ゲwiki - アットウィキ:BSWでドミニオンを操作する際の留意点など
- 無料レンタル「タカミンお絵描きチャット」:Macで日本語入力を有効にするために(ctrl+shift+jでだいたいの場合うまくいく)
*1:各種ファイルが作られるため