Harting(ハルチング)の式というのがありまして, これは薄肉近似のもと2枚の単レンズが密着しているとき(接合ではなくあくまで分離)に3次の範囲の球面収差とコマ収差, そして軸上色収差が理論的に0となる解の計算式があります. これを利用することで実際の有限厚みをもつ実際の設計の初期解を得ることができます. もちろん2枚ぐらいなら設計ソフトの最適化を使えばいきなり最適解を得ることもできますので実際使うことはないと思いますが薄肉密着近似のレンズの設計は人間が計算機を使わず自分の頭と紙とペンだけで設計できる限界の設計理論でもあるため, 知っておく価値があると思います. 今回これを扱ってみます.
薄肉近似とは
単レンズの厚みを0にするとことを薄肉近似といいますが, こうすることで単レンズの両面の光線高さが同じ, また瞳の光線高さも同じにすることができます. この近似を使うとパワーと焦点距離が屈折率, 両側曲率半径を使って以下の通りに表されます*1.
また単レンズの3次収差係数も(比較的)シンプルに表され, m番目のレンズの収差係数はそれぞれ以下の通り表されます*2.
ここでは軸上光線高さと瞳光線高さです. または以下の通りです(厳密にいえば球面の場合).
またこの際絞りがこの単レンズの位置にあり(),無限遠の結像()とすると式(2)のコマ収差と非点収差の項は1つの項だけとなり, 歪曲も0とできます. も以下の通りシンプルに表すことができます.
またこの薄肉単レンズを間隔0で並べた薄肉密着近似を使えば, いずれのレンズも同じ光線高さ,瞳光線高さとなるため, 主光線高さと正規化すると, 全計の収差係数も各面の式(2)の値をそのまま足せばよいです.
Hartingの式
薄肉密着近似を使い, 無限遠結像, 主光線高さを1に正規化すると, 2枚のレンズ系の各収差の係数は以下の通りとなります.
ここで非点収差係数はトータルでのパワーそのものとなり補正しようがありません. 像面湾曲係数も結局ほとんどのレンズの屈折率が1.5-1.7の間の値をとるとなると, これも補正が難しいです. 結局これは薄肉密着近似の元ではレンズを3枚, 4枚,,,に増やしても非点収差は補正することはできないことを意味しており, このことから非点収差はもっとも解析的に補正解を得るのが難しい収差とも言えます*3.
一方球面収差とコマ収差, そして色消しについては係数を0にする解があります. Hartingの式というのはこれを実現する計算式で, 天下り的ですが以下の計算式となります*4. なお以下基本的には全径のパワーはに正規化しています.
また上式を用いて第1レンズの曲率と第2レンズの曲率半径は以下の通りに表されます.
使い方としてまず色消し条件を満たす2つの硝材を選びます. そうすることで自動的に式(5)から各レンズのパワーが決まります. ここから屈折率の値も使い係数AからFとを計算し, を得て曲率半径を得る流れとなります(式(6)(7)). 式(7)のの2次方程式からの解は2つ存在しますので, 曲率のパターンも2つあります. パワーは正規化していますので, これら曲率半径も正規化されています. 実際のスケールにしたい場合,式(8)で得られた曲率半径に系の焦点距離をそのままかければよいです.
実際の設計例
実際の計算例を示します. 仕様としては焦点距離100mm, 主波長はd線(589.6nm) 色消し波長をC線(656.3nm)とF線(486.1nm)とします(要は通常のカメラレンズの条件).
さて色消しの組み合わせとなる2つの硝材を選びますが, 1枚目の正レンズにはOHARAのS-BSM71(), 2枚目の負レンズはS-TIH14()を選んでみます. この時, 正規化したパワーはときれいに計算できます.
そして式(6)の各係数は約
となります. 式(7)からU2の解は2つ存在し, それぞれで以下の2パターンが得られます. 第1の解は両レンズとも曲率が緩くFraunhofer型と呼ばれ, 第2の解はどちらもキツイ値となっておりGauss型と呼ばれます. 単に2枚レンズの設計だけが重要であるなら製造誤差なりもろもろを考慮すると通常は緩いほうのFraunhofer型を選びます. また実際にレンズ2枚使う設計となると接合させることが多いですが今回の例も示している通りFraunhofer型のほうが接合面となる2面の曲率が近いため, 初期解として使いやすいというメリットもあります. Gauss型はいわゆるダブルガウスレンズの設計のベースとなりますがそれはまた別の話. レンズ図にすると以下のようになります. (見やすくするために少し肉厚化しています)
r1 | r2 | r3 | r4 | |
---|---|---|---|---|
Fraunhofer型 | 64.12 | -65.59 | -67.15 | -566.18 |
Gauss型 | 21.68 | 65.46 | 20.98 | 16.45 |
なおこの時1枚目のレンズを正レンズ, 2枚目のレンズを負レンズとしましたが, Hartingの式の理論の枠組みだけで考えれば別に逆でもよいです. 実際に今回のFraunhofer型のほうの設計例を逆にすると以下の通りの結果になります.
r1 | r2 | r3 | r4 | |
---|---|---|---|---|
逆Fraunhofer(Steinheil)型 | 48.74 | 29.72 | 30.65 | 559.57 |
厳密にはこの正レンズを前にするほうをFraunhofer型, 負レンズを前にする設計をSteinheil型と呼ぶらしいです. どちらを選ぶかについては, 今回の例もそうなっていますが, 例えば1枚目のレンズの両側の曲率を揃えるというようなことがよりしやすいなどの理由で通常はこの正レンズを前にするFrounhofer側を選ぶことがあるようです. これが特に重要でなければ曲率が緩いほうを選ぶなど.
もう1つの事例としていわゆる新色消し条件を扱ってみます. つまりガラスマップの右肩上がりではなく右肩下がりの組みあわせのことで例えば1枚目のレンズをOHARAのS-LAH97*5(), 2枚目のレンズは同じくS-TIH14()を使うと以下の曲率が得られます. 今回の例では最初のFraunhofer型の第1レンズの両面の曲率が割と差がありますね.
r1 | r2 | r3 | r4 | |
---|---|---|---|---|
Fraunhofer型 | 65.18 | -45.30 | -43.25 | 197.71 |
Gauss型 | 15.41 | 36.37 | 19.29 | 12.50 |
逆Fraunhofer(Steinheil)型 | 74.42 | 24.03 | 25.03 | 395.20 |
この新色消しだとよりペッツバール和を抑えることができます. ただし実際に厚肉化すると球面収差がより出やすいというデメリットがあるようです.
メインの内容としては以上. 実際はこの設計解から肉厚化とレンズ間の間隔の調整,必要なら接合化をしていきます.
python計算コード
pythonで上記計算をするコードを実装しました. 2つの硝材の屈折率とアッベ数を入力すれば曲率半径を返してくれます.
import math def Harting_equation(total_fl_mm,n1,n2,v1,v2,lenstype): #各係数の計算 phi_1,phi_2=v1/(v1-v2),v2/(v2-v1) A,C,D,E=n1*(n1+2)/phi_1,n2*(n2+2)/phi_2,-2*n1*phi_1,-2*n2*(2-phi_2) F=(n1/(n1-1))*(n1/(n1-1))*(phi_1**3)+(n2/(n2-1))*(n2/(n2-1))*(phi_2**3) alpha=(n1+1)*(n1+1)*C+(n2+1)*(n2+1)*A beta=(n1+1)*(n1+1)*E-(n1+1)*(n2+1)*D-2*(n2+1)*A gamma=(n1+1)*(n1+1)*F+(n2+1)*(n2+1)*D+A #解の条件毎にU2の計算. if lenstype=="G": U2=(-beta+math.sqrt(beta*beta-4*alpha*gamma))/(2*alpha) elif lenstype=="F": U2=(-beta-math.sqrt(beta*beta-4*alpha*gamma))/(2*alpha) else: print("Please specify lenstype as F(fraunhofer) or G(gauss)") U1=(1-(n2+1)*U2)/(n1+1) #曲率半径の計算. 全焦点距離total_fl_mmをかけて実際の曲率半径で表示. r1_mm=total_fl_mm/((n1/2)*(U1/phi_1+phi_1/(n1-1))) r2_mm=total_fl_mm/((n1/2)*(U1/phi_1-phi_1/(n1-1))+phi_1) r3_mm=total_fl_mm/((n2/2)*(U2/phi_2+phi_2/(n2-1))+phi_1) r4_mm=total_fl_mm/((n2/2)*(U2/phi_2-phi_2/(n2-1))+1) return r1_mm,r2_mm,r3_mm,r4_mm phi=100.0 n1=1.648498 v1=53.0 n2=1.761821 v2=26.5 print('-----------Fraunhofer type-----------') print(Harting_equation(phi,n1,n2,v1,v2,'F')) print('-----------Gauss type-----------') print(Harting_equation(phi,n1,n2,v1,v2,'G'))
*1:いわゆるレンズメーカーの式から厚みを0にしたものに一致
*2:レンズ設計法の表記であるこのという文字はどうやらドイツ文字らしいです. 光学っぽいなと思いますがこの時代はいろんな科学技術がドイツから輸入したのでそういった影響もあるのかもしれないです.
*3:もちろん絞りをレンズ位置からずらすなど近似の度合いを1段階落とせば補正することは可能ですがその分複雑にはなります.
*4:AからF係数の内, B係数がないのがちょっと気になるかもしれませんがHartingの式を扱ったどの文献を見てもなぜかこうなっています.
*5:この手の用途ではS-YGH51が有名でしたが, より低コスト化したこのS-LAH97が今はあるようですhttps://www.ohara-inc.co.jp/news/2017/0630/1097/