1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
|
#include <iostream>
#include <string>
#include <fstream>
#include <new>
#include <iomanip>
#include <cstdlib>
#include <cmath>
using namespace std;
/* parameters used in the routines as given in Ref. [1] */
const double PI = 3.14159265359;
const double SAT_HEIGHT = 42164.0; /* distance from Earth centre to satellite */
const double R_EQ = 6378.169; /* radius from Earth centre to equator */
const double R_POL = 6356.5838; /* radius from Earth centre to pol */
const double SUB_LON = 0.0; /* longitude of sub-satellite point in radiant */
const long CFAC = 781648343; /* scaling coefficients (see note above) */
const long LFAC = 781648343; /* scaling coefficients (see note above) */
const long COFF = 1856; /* scaling coefficients (see note above) */
const long LOFF = 1856; /* scaling coefficients (see note above) */
/* function prototypes */
int convert(int column, int row, long COFF, long LOFF, double *latitude, double *longitude);//Cette fonction va servir à convertir les coordonnées géographiques en coordonnées pixels avec l'implémentation de fonctions mathématiques prédéfinies
void deborde();
int main(){
set_new_handler(deborde);
int col=0, row=0;// (col == c == colonne de la coordonnée pixel); (row == r == l == ligne de la coordonnée pixel)
double lon_min=-81.3, lon_max=81.3, resol=0.09, lat_min, lat_max;//bornes de la grille de coordonnées géographique et résolution de cette grille
short int nb_lon, nb_lat, i, j;//nombre de longitude, nombre de latitude, incrément i et incrément j
double return_lon=0.0, return_lat=0.0;//valeurs de vérification
struct pix_coord
{
short int c;
short int r;
};// Structure correspondant à une coordonnée (colonne, ligne) d'un pixel.
string nom_fichier("coord_translation.txt");//fichier facultatif de stockage des résultats
nb_lon=(short int)(floor(((lon_max-lon_min) / resol) + double(1.5)));// calcul du nombre de longitudes de la grille de coordonnées géographique
lat_min=lon_min;
lat_max=lon_max;
nb_lat=nb_lon;//nombre de latitudes de la grille de coordonnées géographique
double lon[nb_lon]; //Déclaration automatique d'un tableau 1D de type double
double lat[nb_lat]; //Déclaration automatique d'un tableau 1D de type double
cout << "Etape 1 : (nb_lon=" << nb_lon << ", nb_lat=" << nb_lat << ")" << endl;
pix_coord pix_coord_tab[nb_lon][nb_lat]; //Déclaration automatique d'un tableau 2D de structure contenant une coordonnée (colonne, ligne) pour chaque élément du tableau de coordonnées géographiques (longitude, latitude)
cout << "Etape 2" << endl;
short int cpt_colonne_fichier=1;
//Les deux boucles avec incréments i et j servent à construire la grille de coordonnées géographique à partir des bornes lat_min, lat_max, lon_min, lon_max prédéfinies et de la résolution voulue (variable resol). Pour chaque coordonnées géographique (longitude, latitude) de la grille, une coordonnée pixel est calculée avec la fonction convert et stockée dans le tableau 2D de structure pix_coord_tab (où pix_coord_tab[i][j].c == colonne de la coordonnée pixel et pix_coord_tab[i][j].r == ligne de la coordonnée pixel)
for(i = 0; i < nb_lon; i++)
{
lon[i]=lon_min + (resol*i);
for(j = 0; j < nb_lat; j++)
{
lat[j]=lat_min + (resol*j);
// convert(lat[j],lon[i],COFF,LOFF,&col,&row);Inutile (phase test déclaration tableaux)
col=0.0;//test!
row=0.0;//test!
pix_coord_tab[i][j].c=col;
pix_coord_tab[i][j].r=row;
}
}
/* ofstream fichier(nom_fichier.c_str(), ios::out | ios::trunc);
if(fichier) // si l'ouverture a réussi
{
for(i = 0; i < nb_lon; i++)
{
for(j = 0; j < nb_lat; j++)
{
fichier << "(" << lon[i] << "," << lat[j] << ")-->(" << pix_coord_tab[i][j].c << "," << pix_coord_tab[i][j].r << ")";
if(cpt_colonne_fichier == 6)
{
fichier << endl;
cpt_colonne_fichier=1;
}
else
{
fichier << "\t";
cpt_colonne_fichier++;
}
}
}
fichier.close(); // on referme le fichier
}
else
{
cerr << "Erreur à l'ouverture du fichier " << nom_fichier << endl;
}
*/
return (0);
}
void deborde()
{
cerr << "Memoire insuffisante" << endl << "Abandon de l'execution\n" << endl;
exit (-1);
} |
Partager