sorc 三角形の解法
// (1) 3辺 a,b,c が既知の3角形の
// ・各辺の対角 A,B,C を求める
// (2) 2辺挟角が既知の3角形の
// ・挟角の対辺の長さを求める
// (3) 2角挟辺が既知の3角形の
// ・両辺の長さを求める
com a = b = c = 0; // 各辺の長さ
com aa = bb = cc = 0; // 各辺の対角
const zero = 0.000001;
//=========================
prog 凾R辺→対角
{
prts( "-- 凾R辺→対角 --" );
prts( "3辺の長さ abc を入力し" );
prts( "対角 ABC を求めます." );
again:
prts( "-----" );
inp( "長さa",a,
"長さb",b,
"長さc",c );
aa = ang3l( a,b,c );
bb = ang3l( b,c,a );
cc = ang3l( c,a,b );
prt( "角度A", aa );
prt( "角度B", bb );
prt( "角度C", cc );
}
//-------------------------
// 3辺 u,v,w から
// 辺 u の対角を求める
//-------------------------
func ang3l( u,v,w )
{
tmp = (v*v+w*w-u*u)/(2*v*w);
ang = acos( tmp );
ret ang;
}
//=========================
prog 凾Q辺挟角→対辺の長さ
{
prts( "-- 凾Q辺挟角→対辺の長さ --" );
prts( "2辺 ab と挟角 C を入力し" );
prts( "挟角の対辺 c の長さを求めます." );
again:
prts( "-----" );
inp( "長さa",a,
"長さb",b,
"挟角C", cc );
c = sqrt(a*a+b*b
-2*a*b*cos(cc));
prt( "長さc", c );
}
//=========================
prog 凾Q角挟辺→両辺の長さ
{
prts( "-- 凾Q角挟辺→両辺の長さ --" );
prts( "2角 AB と挟辺 c を入力し" );
prts( "2角の対辺 ab の長さを求めます." );
again:
prts( "-----" );
inp( "角度A", aa,
"角度B", bb,
"挟辺c", c );
s0=sin(aa);
c0=cos(aa);
s1=sin(bb);
c1=-cos(bb);
dd=-c0*s1+s0*c1;
if ( abs(dd) < zero ){
prts( "答えが求まらない." );
}else{
b=-c*s1/dd;
a=-c*s0/dd;
prt( "長さa", a );
prt( "長さb", b );
}
}
//=========================
prog 凾R辺→高さ・面積
{
prts( "-- 凾R辺→高さ・面積 --" );
prts( "3辺 a,b,c を入力し、" );
prts( "各辺から対角までの垂直距離と" );
prts( "面積を求めます." );
again:
prts( "-----" );
inp( "長さa",a,
"長さb",b,
"長さc",c );
if ( a < zero || b < zero || c < zero ){
ss = ha = hb = hc = 0;
}else{
s = ( a+b+c ) / 2;
ss = sqrt( s*(s-a)*(s-b)*(s-c));
ha = 2*ss / a;
hb = 2*ss / b;
hc = 2*ss / c;
}
prt( "高さHa", ha );
prt( "高さHb", hb );
prt( "高さHc", hc );
prt( "面積", ss );
}