ご存知、レンズと言うのは、光の屈折によって向こう側の物体を拡大したり縮小したりして見るための道具ですね。
例えば、球面レンズであれば、下図の様に球面の一部を切り取った形をしています。
上図の弧ABCが球面レンズです。円弧部分の屈折現象がレンズの原理なので、この部分の曲面の形が大事です。
また、屈折率の高い方が、レンズ効果を大きくできるので、材料の屈折率の高い方が薄くできて有利です。ただ、屈折率の高い材料は一般に高価なので、材料費を抑えようとすると、安い材料を使った上で、ある程度の厚さを持たせる必要があります。一方、厚くすることで、その分、材料が多く必要となって高価になるので、痛し痒しな感じです。
大型のレンズを作成する場合の妨げとなります。
前節、球面レンズの弧の曲面は、そのまま活かして、板のように薄く加工したレンズの事です(下図)。薄く作ることができるので、材料費を安く抑えることができるのが特徴です。
赤い同心円はフレネルレンズの上面図、青いギザギザは断面図です。
一定の長さで半径方向に切って行くと、周辺部と中心部で高さ、従って厚さが異なってしまいます。そこで、最初の図に示した、高さ(厚さ)hが一定となるような半径rで切っていくと、上図の様なギザギザの断面を持った、板状の薄い形状が形成できます。
断面図(青)を見ると、中心部こそ、弧の一部だと判りますが、その外側は、ただの三角形のギザギザが付いている様に見えます。実は、ギザギザ部分は三角形ではなく、斜めの部分は円弧の曲面であることに注意して見てください。
下図を使うので再掲しておきます。
高さhが一定の長さとなる様に増加させた場合の半径rが知りたい情報です。
hとrの関係式:
h,rは、0°≦θ≦90°の間で単調に変化するので、θ=0°〜90°の間を、所望の精度が得られるまで二分探索して求めます。以下、二分探索の手続き(procedure)です。
procedure h2theta hh
{
// レンズの厚さがhhとなる時の角度θ°を求める。
var th;
var ll, rr, mm;
var idx;
var ht;
// 二分探索
ll=0;
rr=90;
idx=0;
while (rr!=ll & idx<100)
{
mm=(ll + rr)/2;
ht=R*sind (mm) - H;
if (ht>hh)
{
rr=mm;
}
else
{
ll=mm;
}
// continue
idx=idx + 1;
}
h2theta=mm;
}
R,Hは、球面レンズの形状を決定する定数なので、θが求められれば、r,hを知ることができます。
レイトレーシングして、動画まで完成した後で気が付きました。
三角関数の公式を使ってθを消去すると、二分探索を使わずとも、rとhの関係式を求めることができ、こっちの方が速かった事に。
公式: (cosθ)2+(sinθ)2=1 より、
((h+H)÷R)2+(r÷R)2=1
(h+H)2+r2=R2
r=√(R2−(h+H)2)
……と、導出して見たら、最後の式は、ただの三平方の定理ですね。ああ、あそこの直角三角形ね……。難しく考え過ぎましたm(1__)m。
まあ、良いか。答えに至る道は一通りではない、ってことで。
完成したデータをリンクしておきます。
1) | Xi-TRACEデータ | fresnel_lens.xitr |
1)でレイトレーシングを実行します。追加考察で気が付いたのですが、そっちの式は使わずに二分探索で求めるデータとなっています。
完成した動画を以下にリンクしておきます。
上の動画でも解るように、フレネルレンズは像が歪むため、カメラや望遠鏡などの映像機器に使われることはありません。灯台の様に、光を絞って遠くまで届かせたい用途で使われていることが有ります。どこかの灯台に登る機会があったら観察して見てください。