次の様な計算を何かに使えないかと…
/*
https://ja.wikipedia.org/wiki/矢_(幾何学)
https://en.wikipedia.org/wiki/Circle#Sagitta
弦 c と 矢 s から 半径 r を求める
r = (c*c) / (8*s) + s/2
半径 r と 弦 c から 矢 s を求める
s = r - sqrt( r*r - (c/2)*(c/2) )
半径 r と 矢 s から 弦 c を求める
c = sqrt( r*r - (r-s)*(r-s) ) * 2
i_func.hxx
https://drive.google.com/file/d/1kHadFbhUi9QfGRovMXKYr2xHgcFJAqdZ/view
*/
double r_cs (const double c , const double s) { return ( ( c*c ) / ( 8*s ) + s/2 ) ; }
double s_rc (const double r , const double c) { return ( r-sqrt(r*r - (c/2)*(c/2) ) ) ; }
double c_rs (const double r , const double s) { return ( sqrt(r*r - (r-s)*(r-s) )*2 ) ; }

動作を確認するために 3,4,5 や 5,12,13 は知っていたが次のキーワードで検索.
三平方の定理 整数 組み合わせ
https://ja.wikipedia.org/wiki/ピタゴラスの定理
先ず C++ で書いたもの.
#include <cmath>
double r_cs (const double c , const double s) { return ( ( c*c ) / ( 8*s ) + s/2 ) ; }
double s_rc (const double r , const double c) { return ( r-sqrt(r*r - (c/2)*(c/2) ) ) ; }
double c_rs (const double r , const double s) { return ( sqrt(r*r - (r-s)*(r-s) )*2 ) ; }
#include <iostream>
int main(void){
std::cout << "6 1 5" << std::endl ;
std::cout << r_cs(6,1) << std::endl ;
std::cout << s_rc(5,6) << std::endl ;
std::cout << c_rs(5,1) << std::endl ;
std::cout << std::endl ;
std::cout << "8 2 5" << std::endl ;
std::cout << r_cs(8,2) << std::endl ;
std::cout << s_rc(5,8) << std::endl ;
std::cout << c_rs(5,2) << std::endl ;
std::cout << std::endl ;
return 0 ;
}
次の所に貼り付けて動作確認できます.
https://paiza.io/ja/
https://wandbox.org/
https://ideone.com/
次は JavaScript .
function r_cs (c , s) { return ( ( c*c ) / ( 8*s ) + s/2 ) ; }
function s_rc (r , c) { return ( r-Math.sqrt(r*r - (c/2)*(c/2) ) ) ; }
function c_rs (r , s) { return ( Math.sqrt(r*r - (r-s)*(r-s) )*2 ) ; }
console.log ("6 1 5") ;
console.log (r_cs(6,1)) ;
console.log (s_rc(5,6)) ;
console.log (c_rs(5,1)) ;
console.log ("") ;
console.log ("8 2 5") ;
console.log (r_cs(8,2)) ;
console.log (s_rc(5,8)) ;
console.log (c_rs(5,2)) ;
console.log ("") ;
Python .
import math
def r_cs (c , s) : return ( ( c*c ) / ( 8.*s ) + s/2. )
def s_rc (r , c) : return ( r-math.sqrt(r*r - (c/2)*(c/2) ) )
def c_rs (r , s) : return ( math.sqrt(r*r - (r-s)*(r-s) )*2 )
print ("6 1 5")
print (r_cs(6,1))
print (s_rc(5,6))
print (c_rs(5,1))
print ("")
print ("8 2 5")
print (r_cs(8,2))
print (s_rc(5,8))
print (c_rs(5,2))
print ("")
2020/05/30
r_cs.py の r_cs で「浮動小数点数」として扱われていなかったので修正.
def r_cs (c , s) : return ( ( c*c ) / ( 8.*s ) + s/2. )