逆インボリュートの計算

 逆インボリュートの計算は、インボリュートギヤのプログラムを組む上で、必ず必要になります、解析解が無い為、関数は用意されていません、自分でプログラム中にサブルーチンとして組み込む必要があります。
逆インボリュートは、近似計算により求めます、一番良いのは、ニュートン法による計算です。
計算ループの回数が少なく、精度も良い結果となります。
プルグラムは簡単でコンポーネントにする必要は無いでしょう。
サンプルプログラムをダウンロードしてコンパイル実行してみれば、通常の近似計算法との差が解ります。

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の値に計算範囲外の値がわたされる事があるからです。
計算中エラーにならないようにしたものが、ダウロードサンプルプログラムに作成してあります。


download  arcinvo.zip

各種プログラム計算例に戻る