#include "longlat.h"
//++ 
// Class	LongLat
//
// include      longlat.h
//
//    translation from  coordinates (longitude, latitude) 
//    to theta,phi
//
//    longitude=phi
//
//    latitude=Pi/2-theta
//
//--
//++
// Titre	Constructors
//--
//++
LongLat::LongLat()
//
//--
{
  _lon=0.;
  _lat=0.;
}
//++
LongLat::LongLat(double longitude, double latitude)
//
//--
{
  _lon=mod(longitude,pi2);
  if( latitude == pi_over_2 ) _lat=latitude;
  else _lat=mod(latitude+pi_over_2,M_PI)-pi_over_2; // dans [-Pi/2,Pi/2]
}
//++
LongLat::LongLat(double x, double y, double z)
//
//--
{
  double norm=sqrt(x*x+y*y+z*z);
  double theta;
  if( norm != 0. ) 
    {
      theta=acos(z/norm); // dans [0,Pi]
      if( mod(theta,M_PI) == 0. ) _lon=0.; // on est sur +-Oz, le vecteur z est en phi=0
      //      else _lon=acos(x/sin(theta)/norm)+M_PI*(y<0);
      else _lon=scangle(y/sin(theta)/norm,x/sin(theta)/norm);
    }
  else // vecteur nul
    {
      theta=0.;
      _lon=0.;
    }
  _lat=pi_over_2-theta;
}
//++
// Titre	Public Methods
//--
//++
void LongLat::Set(double longitude, double latitude)
//
//--
{
  _lon=mod(longitude,pi2);
  if( latitude == pi_over_2 ) _lat=latitude;
  else _lat=mod(latitude+pi_over_2,M_PI)-pi_over_2; // dans [-Pi/2,Pi/2]
}
//++
void LongLat::Print(ostream& os) const
//
//--
{
  os << "LongLat : longitude = " << _lon << " phi   = " << this->Phi() << endl;
  os << "LongLat : latitude    = " << _lat << " theta = " << this->Theta() << endl;
}
//++
//
//  double Longitude() const 
//  double Phi() const 
//  double Latitude() 
//  double Theta() const 
//--
