Práctica Final. Rutas Aéreas.
punto.cpp
Ir a la documentación de este archivo.
1 
9 #include "punto.h"
10 
11 Punto::Punto(): latitud(0), longitud(0){}
12 
13 Punto::Punto(double lat, double lon): latitud(lat), longitud(lon){}
14 
15 double Punto::getLatitud() const{
16  return latitud;
17 }
18 
19 double Punto::getLongitud() const{
20  return longitud;
21 }
22 
23 void Punto::setLatitud(double lat){
24  latitud = lat;
25 }
26 
27 void Punto::setLongitud(double lon){
28  longitud = lon;
29 }
30 
31 bool Punto::operator==(const Punto &p) const{
32  bool igual_long = (abs(longitud - p.longitud) < 1e-5);
33  bool igual_lat = (abs(latitud - p.latitud) < 1e-5);
34  return(igual_long && igual_lat);
35 }
36 
37 ostream & operator<<(ostream & os, const Punto &p){
38  os << "(" << p.getLatitud() << "," << p.getLongitud() << ")";
39  return os;
40 }
41 
42 istream & operator>>(istream & is, Punto &p){
43  double lat, lon;
44  char c;
45  is >> c >> lat >> c >> lon >> c;
46  p.setLatitud(lat);
47  p.setLongitud(lon);
48  return is;
49 }
50 
51 pair<int, int> Punto::coordenadasMapa(int num_columnas, int num_filas) const {
52  int col = (int) ((longitud + 180) * num_columnas / 360);
53  int fila = (int) ((90 - latitud) * num_filas / 180);
54  return pair<int, int>(fila, col);
55  // TODO: Modificar Columnas filas
56 }
57 
58 pair<int,int> Punto::punto_medio_en_mapa(const Punto & p, int num_columnas, int num_filas) const{
59  pair<int,int> p1 = coordenadasMapa(num_columnas, num_filas);
60  pair<int,int> p2 = p.coordenadasMapa(num_columnas, num_filas);
61  return pair<int,int>((p1.first+p2.first)/2,(p1.second+p2.second)/2);
62 }
63 
64 double Punto::angulo_en_mapa(const Punto & p, int num_columnas, int num_filas) const{
65  double angle;
66  pair<int,int> p1 = coordenadasMapa(num_columnas, num_filas);
67  pair<int,int> p2 = p.coordenadasMapa(num_columnas, num_filas);
68  if (p1.second != p2.second) angle = atan((p2.first-p1.first)/(double)(p2.second-p1.second));
69  else if (p2.first > p1.first) angle = M_PI/2;
70  else angle = -M_PI/2;
71 
72  if (p2.second < p1.second) angle += M_PI;
73  return angle;
74 }
TDA Punto.
Definition: punto.h:23
pair< int, int > punto_medio_en_mapa(const Punto &p, int num_columnas, int num_filas) const
Punto medio entre dos puntos.
Definition: punto.cpp:58
void setLatitud(double lat)
Asigna una latitud al punto.
Definition: punto.cpp:23
bool operator==(const Punto &p) const
Sobrecarga del operador ==.
Definition: punto.cpp:31
Punto()
Constructor por defecto.
Definition: punto.cpp:11
double angulo_en_mapa(const Punto &p, int num_columnas, int num_filas) const
Ángulo de la recta que une dos puntos.
Definition: punto.cpp:64
double getLongitud() const
Devuelve la longitud del punto.
Definition: punto.cpp:19
double getLatitud() const
Devuelve la latitud del punto.
Definition: punto.cpp:15
void setLongitud(double lon)
Asigna una longitud al punto.
Definition: punto.cpp:27
pair< int, int > coordenadasMapa(int num_columnas, int num_filas) const
Pasa de coordenadas geográficas a coordenadas en el mapa.
Definition: punto.cpp:51
ostream & operator<<(ostream &os, const Punto &p)
Sobrecarga del operador <<.
Definition: punto.cpp:37
istream & operator>>(istream &is, Punto &p)
Sobrecarga del operador >>
Definition: punto.cpp:42
Fichero cabecera del TDA Punto.