--- /dev/null
+
+interface OperAng {
+
+ public Angulo mas(Angulo f);
+
+ public Angulo menos(Angulo f);
+
+}
+
+interface ComparaAng {
+
+ public int compareTo(Angulo f);
+
+}
+
+class Angulo implements OperAng, ComparaAng {
+
+ private int signo;
+ private int grados;
+ private int minutos;
+ private int segundos;
+
+ public int getSigno() {
+ return signo;
+ }
+
+ public int getGrados() {
+ return grados;
+ }
+
+ public int getMinutos() {
+ return minutos;
+ }
+
+ public int getSegundos() {
+ return segundos;
+ }
+
+ public void setSigno(int s) {
+ if (s < 0)
+ signo = -1;
+ else
+ signo = 1;
+ }
+
+ public void setGrados(int g) {
+ setSigno(g);
+ grados = Math.abs(g % 360);
+ }
+
+ public void setMinutos(int m) {
+ minutos = Math.abs(m % 60);
+ }
+
+ public void setSegundos(int s) {
+ segundos = Math.abs(s % 60);
+ }
+
+ public Angulo() {
+ setGrados(0);
+ setMinutos(0);
+ setSegundos(0);
+ }
+
+ public Angulo(int g, int m, int s) {
+ setGrados(g);
+ setMinutos(m);
+ setSegundos(s);
+ }
+
+ public Angulo(double radianes) {
+ fromRadianes(radianes);
+ }
+
+ public Angulo(Angulo a) {
+ setGrados(a.getGrados());
+ setMinutos(a.getMinutos());
+ setSegundos(a.getSegundos());
+ }
+
+ public String toString() {
+ return ((getSigno() < 0) ? "-" : "") + getGrados() + " " + getMinutos()
+ + "' " + getSegundos() + "\"";
+ }
+
+ public double toRadianes() {
+ return Math.toRadians(getGrados() + getMinutos() / 60.0
+ + getSegundos() / 3600.0) * getSigno();
+ }
+
+ public void fromRadianes(double rad) {
+ rad = Math.toDegrees(rad);
+ setGrados((int)Math.floor(rad));
+ rad -= Math.floor(rad);
+ rad *= 60;
+ setMinutos((int)Math.floor(rad));
+ rad -= Math.floor(rad);
+ rad *= 60;
+ setSegundos((int)Math.round(rad));
+ }
+
+ public Angulo mas(Angulo a) {
+ return new Angulo(toRadianes() + a.toRadianes());
+ }
+
+ public Angulo menos(Angulo a) {
+ return new Angulo(toRadianes() - a.toRadianes());
+ }
+
+ public int compareTo(Angulo a) {
+ if (toRadianes() > a.toRadianes())
+ return 1;
+ if (toRadianes() < a.toRadianes())
+ return -1;
+ return 0;
+ }
+
+ // Test
+ public static void main(String args[]) {
+ Angulo a1 = new Angulo(2, 10, 20);
+ System.out.println("a1 = " + a1 + " (" + a1.toRadianes() + ")");
+ System.out.println("a1 + a1 = " + a1.mas(a1) + " (" + a1.mas(a1).toRadianes() + ")");
+ Angulo a2 = new Angulo(-500, 4, 40);
+ System.out.println("a2 = " + a2 + " (" + a2.toRadianes() + ")");
+ Angulo a3 = a1.menos(a2);
+ System.out.println("a3 = a1 - a2 = " + a3 + " (" + a3.toRadianes() + ")");
+ Angulo a4 = a2.mas(a1);
+ System.out.println("a4 = a2 + a1 = " + a4 + " (" + a4.toRadianes() + ")");
+ System.out.println("a2 comparado a a1 = " + a2.compareTo(a1));
+ System.out.println("a3 comparado a a1 = " + a3.compareTo(a1));
+ System.out.println("a3 comparado a a4 = " + a3.compareTo(a4));
+ //System.out.println("Java esta roto en el manejo de excepciones!!!");
+ }
+
+}
+
+// vim: set et sw=4 sts=4 :