1 #
2 # Trigonometric functions, mostly inherited from Math::Complex.
3 # -- Jarkko Hietaniemi, April 1997
4 #
6 require Exporter;
7 package Math::Trig;
9 use strict;
11 use Math::Complex qw(:trig);
13 use vars qw(\$VERSION \$PACKAGE
14             @ISA
15             @EXPORT
16             \$pi2 \$DR \$RD \$DG \$GD \$RG \$GR);
18 @ISA = qw(Exporter);
20 \$VERSION = 1.00;
26 @EXPORT = (@{\$Math::Complex::EXPORT_TAGS{'trig'}},
27            @angcnv);
29 sub pi2 () {
30     \$pi2 = 2 * pi unless (\$pi2);
31     \$pi2;
32 }
34 sub DR () {
35     \$DR = pi2/360 unless (\$DR);
36     \$DR;
37 }
39 sub RD () {
40     \$RD = 360/pi2 unless (\$RD);
41     \$RD;
42 }
44 sub DG () {
45     \$DG = 400/360 unless (\$DG);
46     \$DG;
47 }
49 sub GD () {
50     \$GD = 360/400 unless (\$GD);
51     \$GD;
52 }
54 sub RG () {
55     \$RG = 400/pi2 unless (\$RG);
56     \$RG;
57 }
59 sub GR () {
60     \$GR = pi2/400 unless (\$GR);
61     \$GR;
62 }
64 #
65 # Truncating remainder.
66 #
68 sub remt (\$\$) {
69     # Oh yes, POSIX::fmod() would be faster. Possibly. If it is available.
70     \$_ - \$_ * int(\$_ / \$_);
71 }
73 #
74 # Angle conversions.
75 #
78     remt(RD * \$_, 360);
79 }
82     remt(DR * \$_, pi2);
83 }
86     remt(GD * \$_, 360);
87 }
90     remt(DG * \$_, 400);
91 }
94     remt(RG * \$_, 400);
95 }
98     remt(GR * \$_, pi2);
99 }
103 Math::Trig - trigonometric functions
107         use Math::Trig;
109         \$x = tan(0.9);
110         \$y = acos(3.7);
111         \$z = asin(2.4);
113         \$halfpi = pi/2;
119 C<Math::Trig> defines many trigonometric functions not defined by the
120 core Perl (which defines only the C<sin()> and C<cos()>.  The constant
121 B<pi> is also defined as are a few convenience functions for angle
122 conversions.
126 The tangent
128         tan
130 The cofunctions of the sine, cosine, and tangent (cosec/csc and cotan/cot
131 are aliases)
133         csc cosec sec cot cotan
135 The arcus (also known as the inverse) functions of the sine, cosine,
136 and tangent
138         asin acos atan
140 The principal value of the arc tangent of y/x
142         atan2(y, x)
144 The arcus cofunctions of the sine, cosine, and tangent (acosec/acsc
145 and acotan/acot are aliases)
147         acsc acosec asec acot acotan
149 The hyperbolic sine, cosine, and tangent
151         sinh cosh tanh
153 The cofunctions of the hyperbolic sine, cosine, and tangent (cosech/csch
154 and cotanh/coth are aliases)
156         csch cosech sech coth cotanh
158 The arcus (also known as the inverse) functions of the hyperbolic
159 sine, cosine, and tangent
161         asinh acosh atanh
163 The arcus cofunctions of the hyperbolic sine, cosine, and tangent
164 (acsch/acosech and acoth/acotanh are aliases)
166         acsch acosech asech acoth acotanh
168 The trigonometric constant B<pi> is also defined.
170         \$pi2 = 2 * pi;
172 =head2 SIMPLE ARGUMENTS, COMPLEX RESULTS
174 Please note that some of the trigonometric functions can break out
175 from the B<real axis> into the B<complex plane>. For example
176 C<asin(2)> has no definition for plain real numbers but it has
177 definition for complex numbers.
179 In Perl terms this means that supplying the usual Perl numbers (also
180 known as scalars, please see L<perldata>) as input for the
181 trigonometric functions might produce as output results that no more
182 are simple real numbers: instead they are complex numbers.
184 The C<Math::Trig> handles this by using the C<Math::Complex> package
185 which knows how to handle complex numbers, please see L<Math::Complex>
186 for more information. In practice you need not to worry about getting
187 complex numbers as results because the C<Math::Complex> takes care of
188 details like for example how to display complex numbers. For example:
190         print asin(2), "\n";
192 should produce something like this (take or leave few last decimals):
194         1.5707963267949-1.31695789692482i
196 That is, a complex number with the real part of approximately E<1.571>
197 and the imaginary part of approximately E<-1.317>.
201 (Plane, 2-dimensional) angles may be converted with the following functions.
212 The full circle is 2 B<pi> radians or E<360> degrees or E<400> gradians.
216 The following functions
218         tan
219         sec
220         csc
221         cot
222         atan
223         acot
224         tanh
225         sech
226         csch
227         coth
228         atanh
229         asech
230         acsch
231         acoth
233 cannot be computed for all arguments because that would mean dividing
234 by zero. These situations cause fatal runtime errors looking like this
236         cot(0): Division by zero.
237         (Because in the definition of cot(0), sin(0) is 0)
238         Died at ...
240 =cut
242 # eof 