46 lines
1.4 KiB
Text
46 lines
1.4 KiB
Text
Pi := 3.14159;
|
|
vardef torad expr x = Pi*x/180 enddef; % conversions
|
|
vardef todeg expr x = 180x/Pi enddef;
|
|
vardef sin expr x = sind(todeg(x)) enddef; % radians version of sind
|
|
vardef cos expr x = cosd(todeg(x)) enddef; % and cosd
|
|
|
|
vardef sign expr x = if x>=0: 1 else: -1 fi enddef; % commodity
|
|
|
|
vardef tand expr x = % tan with arg in degree
|
|
if cosd(x) = 0:
|
|
infinity * sign(sind(x))
|
|
else: sind(x)/cosd(x) fi enddef;
|
|
vardef tan expr x = tand(todeg(x)) enddef; % arg in rad
|
|
|
|
% INVERSE
|
|
|
|
% the arc having x as tanget is that between x-axis and a line
|
|
% from the center to the point (1, x); MF angle says this
|
|
vardef atand expr x = angle(1,x) enddef;
|
|
vardef atan expr x = torad(atand(x)) enddef; % rad version
|
|
|
|
% known formula to express asin and acos in function of
|
|
% atan; a+-+b stays for sqrt(a^2 - b^2) (defined in plain MF)
|
|
vardef asin expr x = 2atan(x/(1+(1+-+x))) enddef;
|
|
vardef acos expr x = 2atan((1+-+x)/(1+x)) enddef;
|
|
|
|
vardef asind expr x = todeg(asin(x)) enddef; % degree versions
|
|
vardef acosd expr x = todeg(acos(x)) enddef;
|
|
|
|
% commodity
|
|
def outcompare(expr a, b) = message decimal a & " = " & decimal b enddef;
|
|
|
|
% output tests
|
|
outcompare(torad(60), Pi/3);
|
|
outcompare(todeg(Pi/6), 30);
|
|
|
|
outcompare(Pi/3, asin(sind(60)));
|
|
outcompare(30, acosd(cos(Pi/6)));
|
|
outcompare(45, atand(tand(45)));
|
|
outcompare(Pi/4, atan(tand(45)));
|
|
|
|
outcompare(sin(Pi/3), sind(60));
|
|
outcompare(cos(Pi/4), cosd(45));
|
|
outcompare(tan(Pi/3), tand(60));
|
|
|
|
end
|