「円の弧長,弦長,矢高,半径のどれか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))を用い、ニュートン・ラフソン法で
計算しています。
”
リンクはこちら↓
半径を入力するものはニュートン法じゃなくて単なる逆三角関数で計算できますが。
ニュートン・ラフソン法の説明はこちら。
(参考)
Windowsアプリ版:
「円の弧長・弦長・矢高・半径のどれか2つを与えて残りを計算」するWindowsアプリ(.exe)を作ってみた。keisan.casio.jpとExcel VBA版のVB.net移植版。
Excel版:
円の弧長,弦長,矢高,半径のどれか2つを与えて残りを計算するExcelシート(VBA利用)を作った。ダウンロードできます。カシオの高精度計算サイトのExcel移植版。
では自作式の中身も公開。keisan.casio.jpで公開してもいいけどこちらのブログを見てくれた方のみに公開しましょう。
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
こういう話:
のような状態。。。想定していたのはこの絵の通り、180°以下。
使っている人がいるなら修正せねばなるまい。
なんで2つ解があるかというと、
« NHKスペシャル「ここまで来た!うつ病治療」のメモ - 2012/2/12 | トップページ | 「死ねばいいのに」(京極夏彦)を読んだ。 »
「学問・資格」カテゴリの記事
- 高周波・RFニュース 2024年12月6日 NGMNが無線パフォーマンス評価フレームワーク発行、5GAAがC-V2Xのロードマップ発行、Marvellの3nm 1.6Tbps PAM4インターコネクト、Nokiaの2.4Tbps光伝送、Silicon Labsの低消費電力モジュール、Xiaomi 14T Pro分解動画(2024.12.06)
- 高周波回路シミュレータQucsStudioがuSimmicsに名称変更し、バージョンも4.8.3から5.8にアップデートされた。Qucsと区別するためだそうだ。また、Pythonの高周波用ライブラリscikit-rfもv1.5.0にバージョンアップされていた(2024.12.04)
- 日経サイエンス2025年1月号の特集 和算再発見の佐藤賢一さんの記事「算聖 関孝和の実像」に出てきた矢高に対する円弧の2乗の近似式をカシオの高精度計算サイトkeisan.casio.jpの自作式として作った。ものすごい精度であることがよくわかる。(2024.12.03)
- MATLAB Onlineで高周波基板設計用のRF PCB Toolboxを使ってみる。Coupled line バンドパスフィルタやratraceカプラが設計できる。モーメント法(MoM)や有限要素法(FEM)でちゃんと計算してくれているようだ。(2024.12.06)
- MATLAB Onlineで高周波用のRF Toolboxを使ってみる。Touchstoneファイルの読み込み、dB表示グラフ、スミスチャートなど簡単にできるし、フィルタ合成やIEEE P370 De-embedding(ZC-2xThru)も使える(MATLABで書かれたものがオリジナル)。(2024.12.05)
コメント
« NHKスペシャル「ここまで来た!うつ病治療」のメモ - 2012/2/12 | トップページ | 「死ねばいいのに」(京極夏彦)を読んだ。 »
質問なのですが,円弧の長さと矢高から弦長も求めるときに使用している
x=x-(-a*x*x+x*(1.-cos(x)))/(x*sin(x)-1.+cos(x))
の式はどのようにして得られたのでしょうか?
投稿: | 2019年8月22日 (木) 10時40分