IDI Software Component Library
© 2005 Information Disciplines, Inc., Chicago

Angle (Java Class Definition)


Conrad Weisert, Information Disciplines, Inc., Chicago


Many scientific and engineering applications as well as some business applications need to manipulate angles. (Java programmers who represent angles as primitive floating-point numbers, as if they were coding in Fortran, sacrifice the units integrity, error checking, maintainability, and simplicity of objects.)


Get the source code, compile it, and store the .class file in your directory path.

For compatibility with the Java Math library and other software, the range of values is (-pi,pi], i.e. not [0,2pi). Normalization is automatic with all operations including constructors.


What about the C++ version?

Java may be a poor choice of language for computation that involves angles, because of both inefficiency and unnatural syntax. You'll find IDI's more efficient and more natural C++ Angle class in Conrad Weisert's book Object Oriented Computation in C++ and Java or contact IDI.

Usage documentation reminder

We've explained why we avoid the JAVADOC style of usage documentation.

   Angle(double radians) 
   Angle(int deg, int min, int sec)  //  (See Note 1)
   Angle(int deg, int min)	     //  (See Note 1)		
   Angle(Angle theta)       	     // (copy constructor)	
   Angle()                           // (default value = 0)

Note 1: For these mixed unit constructors, the signs of the individual integer components are treated algebraically; normally they should all be the same, e.g. to specify -22.5 degrees code Angle(-22,-30).

Accessor functions

   double theta.toRadians()   
   double theta.toDegrees(); 
   short  theta.degrees();
   short  theta.minutes();	
   short  theta.seconds(); 	//  (rounded)

Arithmetic and relational operator functions

These pseudo-operators follow the design pattern for additive classes and are named in accord with IDI's Java operator naming conventions. In the examples a1 and a2 are Angle objects and x is a pure number, usually double.

corresponding C++ expression Java function syntax result type if new object
a1 = a2a1.set(a2) -
a1 += a2a1.addSet(a2) -
a1 -= a2a1.subSet(a2) -
a1 *= xa1.mpySet(x) -
a1 /= xa1.divSet(x) -
a1 + a2a1.add(a2)Angle
a1 - a2a1.sub(a2)Angle
a1 * x a1.mpy(x)Angle
a1 / x a1.div(x)Angle
a1 / a2 a2.div(a2)double
a1 == a2a1.equals(a2)boolean
a1 < a2a1.lessThan(a2)boolean
a1 > a2a1.greaterThan(a2)boolean

Note that because of normalization, the ordering relations are not transitive. Also, because of internal floating-point representation, testing for equality is unreliable.

String-valued conversion/formatting function

a.tostring() yields the default external representation in integer degrees, minutes, and seconds,
e.g. 45°0'0" , -134°59'59"
If you prefer radians or need more accuracy, just use the toRadians() accessor.

Trigonometric functions

These methods return double These inverse class functions return a new Angle object
a.cos() arccos(double x)
a.sin() arcsin(double x)
a.tan() arctan(double y, double x)
- arctan(double x)


Relationship to Complex number class

Note that an Angle class is an essential companion to a Complex number class if users are to be given the choice of constructor coordinates:

              Complex(realPart, imagPart)
              Complex(rho, theta)
By overloading the Complex constructors to recognize the difference between a double and an Angle in the second parameter we avoid ambiguity while giving the users both alternatives.

Return to Freeware directory
Return to IDI home page

Last modified August 2, 2005