SSブログ

Bezier曲線によるレンズ形状近似 - その3 [レンズ形状をBezierで描く]

突然始めた、Bezier曲線によるレンズの断面形状近似。さくっとあげないとまただらだらしてわからなくなってしまう。一気に計算しよう。今日のところがキモになる、はず。

あとは終点での傾きと2回微分を一致させる。
一般に2次元の曲線が媒介変数で表示されたとき、つまり
0527eq14.png
のとき傾きdy/dx
0527eq15.png
である。ただし煩わしいので
0527eq15a.png
などと書いた。

二階微分d2y/dx2
0527eq16.png
となる。もちろんどちらの微分も、xytに関する微分が0になったりするような場合を除くことにする。というか、そんな「アキレスと亀」の収束点みたいなのがある媒介変数を使うのは最初からやめたほうがいい、なんとでも書けるんだから。

終点でのBezier曲線の傾きはわざわざ微分するまでもなく(もちろん微分しても同じ結果だけど)
0527eq17.png
である。

2回微分はめんどくさいけど
0527eq18.png
Bx0=0、By0=0、Bx1=0とすると(最後のだけが効いて)
0527eq19.png
こんなの。あってると思うんだけど。

球面のほうを後から計算するとして、光軸での曲率はηで、一階微分の値をsh、二階微分の値をs"hとして連立すると
0527eq20.png
また、終点の座標が一致するので
0527eq23.png
とする。ただし球面の終点の座標を{sh,h}と書いた。

最後の式を除いてBx2By2を解いてBy1の式に書くのは簡単で、
0527eq25.png
となる。

これを最後の式に代入して整理すると
0527eq27.png
となる。By1に関する4次の方程式で、なかなか残念な形である。4次なので代数的に解くことはできるけど、元の式が比較的簡単なわりに面倒な場合分けも必要で、結構な計算量になる。

ということで、厳密解が欲しいわけではないし、目で見て誤差が大きくなければいいので、直接解は諦めてNewton法などで収束演算したほうがずっと簡単で、計算量も少なくすることができる。また、この4次方程式の解はB0B3で決まるAABB(座標軸に平行な長方形のバウンディングボックス)の近傍から大きく離れることはない(近似したい面に変曲点がなければAABB内にあるはずである)ので、Newton法にとっても素性の良いすなおな問題のはずである。

ということでちょっとだけ数値計算に優しい形に変形しておくと
0527eq28.png
ぐらいの感じか。

Newton法で解を得るために式-27のBy1に関する微分を計算しておくと
0527eq29.png
というような感じ。

球面の方はまじめに微分して
0527eq30.png
また、2回微分は
0527eq31.png
などという簡単な式になる。 ほんとかな。ディメンジョンはあってるけどな。
nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。