« NHKスペシャル「ここまで来た!うつ病治療」のメモ - 2012/2/12 | トップページ | 「死ねばいいのに」(京極夏彦)を読んだ。 »

2012年2月13日 (月)

「円の弧長,弦長,矢高,半径のどれか2つを与えて残りを計算」をkeisan.casio.jpにUP!

こういう計算について、このブログに検索されてくる方多いんですよね。カシオの高精度計算サイトの自作式にも何種類か上げてますが、そこのヒット数も結構あるということでこの際、全部まとめて一つの式にしました。

内容は、

”弧長(円弧の長さ)L、弦長d、矢高(円弧の高さ)h、半径rのどれか2つに値を
入力して、残りの2つを0と入力すると、その残りの2つおよび中心角を計算します。
L=r*θ, d=2*r*sin(θ/2), h=r*(1-cos(θ/2))を用い、ニュートン・ラフソン法で
計算しています。

リンクはこちら↓

円の弧長,弦長,矢高,半径のどれか2つを与えて残りを計算

 

Circle

 

半径を入力するものはニュートン法じゃなくて単なる逆三角関数で計算できますが。

ニュートン・ラフソン法の説明はこちら

(参考)

Windowsアプリ版:

「円の弧長・弦長・矢高・半径のどれか2つを与えて残りを計算」するWindowsアプリ(.exe)を作ってみた。keisan.casio.jpとExcel VBA版のVB.net移植版。

Excel版:

円の弧長,弦長,矢高,半径のどれか2つを与えて残りを計算するExcelシート(VBA利用)を作った。ダウンロードできます。カシオの高精度計算サイトのExcel移植版。

では自作式の中身も公開。keisan.casio.jpで公開してもいいけどこちらのブログを見てくれた方のみに公開しましょう。

「circle_calc.txt」をダウンロード

 

 

L=弧長;
d=弦長;
h=矢高;
r=半径;
if (L<>0 and h<>0 and d==0 and r==0) {
    /* 円弧の長さと矢高から弦長 */
    a=2.*h/L;
    x=1.0;
    for (j=0;j<=20;j=j+1) {
        x=x-(-a*x*x+x*(1.-cos(x)))/(x*sin(x)-1.+cos(x));
    }
    th=2*x;
    r=L/th;
    d=2.*r*sin(x);
} elseif (L<>0 and d<>0 and h==0 and r==0) {
    /* 円弧の長さと弦長から矢高 */
    c=d/L;
    x=1.0;
    for (j=0;j<=20;j=j+1) {
        x=x-((x*sin(x)-c*x*x)/(x*cos(x)-sin(x)));
    }
    th=2*x;
    r=L/th;
    h=r*(1.-cos(th/2.));
} elseif (L==0 and d<>0 and h<>0 and r==0) {
    /* 弦長と矢高から円弧 */
    a=h/d;
    x=1.0;
    for (j=0;j<=20;j=j+1) {
        f=(1.-cos(x))/(2.*sin(x)) - a;
        fd = (1.-cos(x))/(2.*sin(x)*sin(x));
        x=x-f/fd;
    }
    th=2*x;
    r=d/(2.*sin(x));
    L=r*th;
} elseif (L<>0 and d==0 and h==0 and r<>0) {
    /*円弧の長さと半径から弦長・矢高*/
    th=L/r;
    d=2.*r*sin(th/2.);
    h=r*(1.-cos(th/2.));
}  elseif (L==0 and d<>0 and h==0 and r<>0) {  
    /*弦長と半径から矢高・円弧 */
    th = 2.*asin(d/(2.*r));
    L=r*th;
    h=r*(1.-cos(th/2.));
}  elseif (L==0 and d==0 and h<>0 and r<>0) { 
   /*矢高と半径から弦長・弧長*/
   th = 2.*acos(1.-(h/r));
   L=r*th;
   d=2.*r*sin(th/2.);
}
println(L);
println(d);
println(h);
println(r);
println(th*180/pi);

※これではだめな場合があるので修正入れました。

円の弧長,弦長,矢高,半径のどれか2つを与えて残りを計算(カシオの高精度計算サイト自作式)で180°以上、複数解に対応。

https://sci.tea-nifty.com/blog/2018/10/2180-9d2a.html

こういう話:

 

 

弧長345.1840854矢高125と入力すると弦長114.6153961半径75.63668903中心角261.4814516と表示されるが、弦長100半径72.5中心角271.7943621もあります、プラスの解が複数ある場合があるようです。当方、模型の制作、検査をしている者ですが数学のレベルが中学生以下なのでこちらの自作式を使用させてもらっています。これはお願いですが、弦長、半径、既知と弧長、矢高、既知のように解が複数あるときはそれらも表示出来る様にしてもらえないでしょうか、ぜひ御検討お願いいたします。
え!180°以上で使っている人いたのか!と驚いた。しかも模型なのか。
実際、この2つの解って

 

Enko2018102

 

のような状態。。。想定していたのはこの絵の通り、180°以下。

 

Enko201810

 

 

 

使っている人がいるなら修正せねばなるまい。

なんで2つ解があるかというと、

L=r*θ, d=2*r*sin(θ/2), h=r*(1-cos(θ/2))
から計算しているのだが、矢高と弧長だと、
2*h/d=(1-cos(x))/x       (ただしx=θ/2)なのだが、この関数が、

 

Enko2018103

 

 

こんな形なので、x<πまでに2つ解が出てくる。
(本当は180°以下の中心角が小さいほうだけしかいらないと思っていた、、、)
もう一つ、弦長と半径の場合も180°超えていいなら2つ解がでる。
あとはたぶんないはず、、、

 

 

« NHKスペシャル「ここまで来た!うつ病治療」のメモ - 2012/2/12 | トップページ | 「死ねばいいのに」(京極夏彦)を読んだ。 »

学問・資格」カテゴリの記事

コメント

質問なのですが,円弧の長さと矢高から弦長も求めるときに使用している
x=x-(-a*x*x+x*(1.-cos(x)))/(x*sin(x)-1.+cos(x))
の式はどのようにして得られたのでしょうか?

コメントを書く

(ウェブ上には掲載しません)

トラックバック

« NHKスペシャル「ここまで来た!うつ病治療」のメモ - 2012/2/12 | トップページ | 「死ねばいいのに」(京極夏彦)を読んだ。 »

最近の記事

最近のコメント

2024年12月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
フォト
無料ブログはココログ