Coloco este esbozo de una Clase Coordenadas (en R ) con el fin de ir mejorndola
con el tiempo. Los mtodos corresponden al constructor y destructor de la Clase,
un procedimiento para iniciar (copiar) y mostrar los objetos, la sobrecarga de los
operadores & y % para realizar el producto escalar y el calculo de la distancia entre
dos vectores, respectivamente, la sobrecarga de los operadores + y para la suma y
resta de vectores, la sobrecarga del operador * para la multiplicacin de un vector
por un escalar, la sobrecarga de los operadores >> y << para la entrada y salida por
pantalla con formato vectorial, la implementacin de funciones para el cambio de
coordenadas: geogrficas a UTM, UTM a geogrficas, de geogrficas a geocntricas
y de geocntricas a geogrficas (cambio de datum con 7 parmetros).
3
#include <iostream>
2
3
4
5
6
#include <cstdlib>
#include <cmath>
7
8
class Coordenadas {
9
private:
1
0
11
1
2
1
double a[3];
public:
1
4
Coordenadas(); // Constructor de la clase coordenadas
1
5
1
6
void Iniciar(double m[3]);
1
7
1
8
void CambioUtmGeo (int huso, int selector, char hem, Coordenadas v, Coo
1
9
2
0
2
1
2
2
2
3
2
4
2
5
2
6
2
2
8
2
9
3
0
friend istream& operator >> (istream &entrada, Coordenadas &z);
3
1
friend ostream& operator << (ostream &salida, Coordenadas &z);
3
2
3
3
3
4
3
5
3
6
3
7
3
8
3
9
4
0
4
};
1
4
2
4
3
4
4
Por falta de espacio, a continuacin, presento solamente una seleccin de los
mtodos implementados.
1
2
3
4
5
int i;
6
7
double prod_esc = 0;
8
9
10
prod_esc += v.a[i]*a[i];
11
12
}
13
return prod_esc;
14
15
16
17
18
19
20
21
22
int i;
23
double distancia = 0;
24
25
for (i=0; i< 3; i++){
26
27
distancia += (v.a[i]-a[i])*(v.a[i]-a[i]);
28
29
30
31
32
distancia = sqrt(distancia);
33
return distancia;
34
35
36
37
38
39
Coordenadas tempo;
40
41
int i;
42
43
44
45
tempo.a[i] = t.a[i] + s.a[i];
46
47
}
48
49
return tempo;
50
51
52
53
54
55
Coordenadas tempo;
56
57
int i;
58
59
60
61
62
63
}
64
65
return tempo;
66
67
}
68
69
70
71
72
Coordenadas tempo;
73
int i;
74
75
76
77
tempo.a[i] = n*s.a[i];
78
79
}
80
81
return tempo;
82
83
}
84
85
86
87
int i;
88
89
90
91
92
93
94
}
95
96
return entrada;
97
98
99
10
0
10
1
10
2
cout.setf(ios::fixed);
cout.precision(4);
10
3
10
4
10
5
10
6
int i;
10
7
10
8
10
9
110
111
112
113
114
115
116
117
118
119
return salida;
12
0
}
12
1
12
2
12
3
Para probar algunas cosas tenemos el siguiente programa principal:
1
#include "Coordenadas.h"
2
3
int main(){
4
5
system("clear");
6
7
8
9
1
0
11
int i;
char hem;
1
2
1
3
1
4
1
5
1
6
1
7
1
1
9
cout << "v=a=" << a << "w=b=" << b; // se sobrecargo el operador << para i
2
0
2
1
c = a + b;
d = a - b;
2
2
2
3
2
4
2
5
2
6
cout << "c = a + b = " << c << "d = a - b = " << d << "vector a normalizad
2
7
cout << "producto escalar de a*a = " << prod_esc << "\n";
2
8
2
9
3
0
3
1
cout << "Distancia entre a y b = ";
2
3
3
3
4
3
5
cout << "vector en coordenadas UTM = f = " << f;
3
6
3
7
3
8
g.CambioUtmGeo(30,1,'n',f,g);
cout << "paso por referencia: vector en coordenadas geograficas = g = " <<
3
9
k = j.CambioUtmGeo(30,1,'n',f),
4
0
4
1
4
2
cout << "paso por valor: vector en coordenadas geograficas = k = " << k;
4
3
m.CambioUtmGeo(19,2,'s',h,m);
4
4
4
5
4
cout << "paso por referencia: vector en coordenadas geograficas = m = " <<
6
4
7
4
8
n.CambioGeoUtm(2,'o','s',m,n);
cout << "paso por referencia: vector en coordenadas UTM = n = h = " << n;
4
9
cout <<
o;
5
0
5
1
5
2
l.CambioUtmGeo(30,2,'n',o,l);
5
3
cout << l;
5
4
5
5
5
6
a.CambioGeo_Geocent(2,l,a);
cout << a;
5
7
b.CambioGeocent_Geo(3,a,b);
5
8
5
9
6
cout << b;
0
c.CambioGeoUtm(1,'o','n',b,c);
6
1
6
2
cout << c;
6
3
return 0;
6
4
6
5
6
6
6
7
6
8
6
9
7
0
7
1
7
2
7
3
7
4
7
5
7
6
7
7
7
8
7
9
8
0
8
1
8
2
8
3
8
4
8
5
8
6
8
7
8
8
8
9
9
0
9
1
el cual produce la siguiente salida:
1
3
4
5
6
producto escalar de a*a = 6.0000
7
norma de e = 1.0000
8
9
1
0
11
1
2
1
3
1
4
1
5
1
6
1
7
1
8
1
9
2
0
Las 5 ltimas lneas corresponden a la transformacin de (448500.7900,
4377580.9300, 771.7600), coordenadas UTM datum ETRS89, a (448610.6013,
4377788.1567, 697.8972), coordenadas UTM datum ED50, del vrtice de
carbonera (Espaa). El proceso es realizado por mtodos que permiten el paso de
coordenadas UTM a geogrficas, de geogrficas a geocntricas, de geocntricas a
geogrficas (cambio de datum con 7 parmetros) y, finalmente, de geogrficas a
UTM. La documentacin de estos mtodos ser el tema de prximos artculos.