逆インボリュートの計算
逆インボリュートの計算は、インボリュートギヤのプログラムを組む上で、必ず必要になります、解析解が無い為、関数は用意されていません、自分でプログラム中にサブルーチンとして組み込む必要があります。
逆インボリュートは、近似計算により求めます、一番良いのは、ニュートン法による計算です。
計算ループの回数が少なく、精度も良い結果となります。
プルグラムは簡単でコンポーネントにする必要は無いでしょう。
サンプルプログラムをダウンロードしてコンパイル実行してみれば、通常の近似計算法との差が解ります。
function disinvo(inva0:Double):Double;{逆インボリュート} var tandisas,inva3,disas: double; begin disas := 89 * pi / 180; // 初期値の設定 while abs(inva3) > 1E-7 do // 収束判定 begin tandisas := tan(disas); inva3 := (tandisas - disas - inva0) / (tandisas * tandisas); disas := disas - inva3; end; disinvo := disas; // Result := disas; と同じです end; // tandisas - disas はインポリュート計算です // inva0を引いて誤差を計算します。 // tandisas2 で除算して誤差の補正をします。 // 仮の値から誤差inva3を差し引いて、新しい仮の値とします。 // 誤差の値が指定値と等しいか小さくなるまで繰り返します。
while文を使用していますが、repeat文でも構いません。
計算に先立って仮の値として89°の値を入れていますが、ニュートン法の場合、求める逆インボリュートの値より大きい値を、先立って入れておかないと収束しません。
90°の値は、tan(θ)の計算時オーバーフローするので、90°より小さい値とします。
実際にプログラムの中で使用する場合は、計算の途中で、エラーにならない様にもう少し工夫が必要です。
プログラム中で使用すると、inva0の値に計算範囲外の値がわたされる事があるからです。
計算中エラーにならないようにしたものが、ダウロードサンプルプログラムに作成してあります。
arcinvo.zip