source: Sophya/trunk/SophyaLib/SkyMap/longlat.cc@ 3868

Last change on this file since 3868 was 2973, checked in by ansari, 19 years ago

1/ Nettoyage+commentaires/doxygen ds Vector3d, UnitVector, LongLat,
SphereCoordSys ...
2/ Ajout de la classe angle pour faciliter les conversions rad<>deg<>arcmin
dans le fichier vector3d.h .cc
3/ nettoyage/uniformisation methodes print pour pixelmap, ajout de la
methode PixelMap<T>::Show()
4/ Ajout methodes SphericalMap<T>::HasSymThetaSlice() et
GetSymThetaSliceIndex(int_4 idx) et leurs implementations pour
SphereHEALPix et SphereThetaPhi en vue de l'optimisation du calcul
transforme Ylm
5/ Ajout methode ResolToSizeIndex ds SphereThetaPhi , SphereHEALPix et
SphereECP

Reza , 20 Juin 2006

File size: 1.8 KB
Line 
1// Angles/geometrie 3D
2// B. Revenu 2000
3// R. Ansari 2006
4// DAPNIA/SPP (Saclay) / CEA LAL - IN2P3/CNRS (Orsay)
5
6#include "sopnamsp.h"
7#include "longlat.h"
8
9
10/*!
11 \class SOPHYA::LongLat
12 \ingroup SkyMap
13 \brief Coordinate transform from (longitude,latitude) to (theta,phi)
14 All angles are specified in radians
15
16 - longitude=phi
17 - latitude=Pi/2-theta (latitude=0 -> equator)
18*/
19
20//! Default constructor: longitude=latitude=0
21LongLat::LongLat()
22{
23 _lon=0.;
24 _lat=0.;
25}
26//! Constructor
27LongLat::LongLat(double longitude, double latitude)
28{
29 _lon=mod(longitude,pi2);
30 if( latitude == pi_over_2 ) _lat=latitude;
31 else _lat=mod(latitude+pi_over_2,M_PI)-pi_over_2; // dans [-Pi/2,Pi/2]
32}
33
34//! Constructor form cartesian coordiantes
35LongLat::LongLat(double x, double y, double z)
36{
37 double norm=sqrt(x*x+y*y+z*z);
38 double theta;
39 if( norm != 0. )
40 {
41 theta=acos(z/norm); // dans [0,Pi]
42 if( mod(theta,M_PI) == 0. ) _lon=0.; // on est sur +-Oz, le vecteur z est en phi=0
43 // else _lon=acos(x/sin(theta)/norm)+M_PI*(y<0);
44 else _lon=scangle(y/sin(theta)/norm,x/sin(theta)/norm);
45 }
46 else // vecteur nul
47 {
48 theta=0.;
49 _lon=0.;
50 }
51 _lat=pi_over_2-theta;
52}
53//++
54// Titre Public Methods
55//--
56//++
57void LongLat::Set(double longitude, double latitude)
58//
59//--
60{
61 _lon=mod(longitude,pi2);
62 if( latitude == pi_over_2 ) _lat=latitude;
63 else _lat=mod(latitude+pi_over_2,M_PI)-pi_over_2; // dans [-Pi/2,Pi/2]
64}
65//++
66void LongLat::Print(ostream& os) const
67//
68//--
69{
70 os << "LongLat : longitude = " << _lon << " phi = " << this->Phi() << endl;
71 os << "LongLat : latitude = " << _lat << " theta = " << this->Theta() << endl;
72}
73//++
74//
75// double Longitude() const
76// double Phi() const
77// double Latitude()
78// double Theta() const
79//--
Note: See TracBrowser for help on using the repository browser.