楕円の円周
作者: yangmask さん実行数: 430505
※ 本ライブラリは会員の方が作成した作品です。内容について当サイトは一切関知しません。
精度としては、長半径1の時、計算結果は、0.00001の位までの正確さだとお考えください。
例えば、長半径0.5、短半径0.5、すなわち、直径1の真円として計算してみてください。そうすれば, 3.14158335634999245734 と出るはずです。つまり、円周率です。円周率の真値は,3.1415926535・・・だそうですので、精度としては、(長半径1の時)、 0.0001の位までだと分かります。
なぜ、1000箇所に区切ったのかというと、それ以上は、タイムアウトで計算できなかったなどの問題があったからです。もし、ご自分の計算機で計算されるなら、もっと精度の高い値が得られるかもしれません。
_____
以下に、プログラムを示します。精度=0.001の部分を改変し、もっと小さい値にして、かつ、2行目のn<=1000を、1÷精度の値になるように調整してください。
k=0;精度=0.001;縦横比率=短半径/長半径;
for(n=1;n<=1000;n=n+1)
{ j=(sqrt((精度^2)+(縦横比率^2*((sqrt(1-(精度*(n-1))^2)-sqrt(1-(精度*n)^2))^2))));
k=k+j;
答え=k*長半径*4;}
print(答え);
_____
あるいは、他の計算機なら、こう記述するかもしれません。
Σ (n=1,1/★) {√((★^2)+(▲^2*((√(1-(★*(n-1))^2)-√(1-(★*n)^2))^2)))}
★の部分が精度(例えば、0.001)で、▲が短半径/長半径の値です。ただし、この計算結果に、×長半径×4としたものが、その楕円の円周です。
なぜ、1000箇所に区切ったのかというと、それ以上は、タイムアウトで計算できなかったなどの問題があったからです。もし、ご自分の計算機で計算されるなら、もっと精度の高い値が得られるかもしれません。
_____
以下に、プログラムを示します。精度=0.001の部分を改変し、もっと小さい値にして、かつ、2行目のn<=1000を、1÷精度の値になるように調整してください。
k=0;精度=0.001;縦横比率=短半径/長半径;
for(n=1;n<=1000;n=n+1)
{ j=(sqrt((精度^2)+(縦横比率^2*((sqrt(1-(精度*(n-1))^2)-sqrt(1-(精度*n)^2))^2))));
k=k+j;
答え=k*長半径*4;}
print(答え);
_____
あるいは、他の計算機なら、こう記述するかもしれません。
Σ (n=1,1/★) {√((★^2)+(▲^2*((√(1-(★*(n-1))^2)-√(1-(★*n)^2))^2)))}
★の部分が精度(例えば、0.001)で、▲が短半径/長半径の値です。ただし、この計算結果に、×長半径×4としたものが、その楕円の円周です。
この計算についてお客様の声はまだありません。
考え方としては、半径を等間隔に1000箇所に区切り、その区切り箇所の水平線と楕円が接する点を特定し、
その点と点とを結んだ線の長さの総和を求める・・・というものです。
要するに、多角形により、楕円の円周の近似値を得るということです。
詳しくは、下記リンクをご参照のこと。