20 #ifndef _STELUTILS_HPP_
21 #define _STELUTILS_HPP_
24 #include "VecMath.hpp"
26 #include <QVariantMap>
31 #define AU 149597870.691
32 #define AU_KM (1.0/149597870.691)
34 #define PARSEC 30.857e12
36 #define SPEED_OF_LIGHT 299792.458
38 #define stelpow10f(x) std::exp((x) * 2.3025850930f)
57 double hmsToRad(
const unsigned int h,
const unsigned int m,
const double s);
64 double dmsToRad(
const int d,
const unsigned int m,
const double s);
71 void radToHms(
double rad,
unsigned int& h,
unsigned int& m,
double& s);
79 void radToDms(
double rad,
bool&
sign,
unsigned int& d,
unsigned int& m,
double& s);
92 QString
radToDecDegStr(
const double angle,
const int precision = 4,
const bool useD=
false,
const bool useC=
false);
102 QString
radToHmsStr(
const double angle,
const bool decimal=
false);
114 QString
radToDmsStr(
const double angle,
const bool decimal=
false,
const bool useD=
false);
122 void decDegToDms(
double angle,
bool&
sign,
unsigned int& d,
unsigned int& m,
double& s);
189 void equToEcl(
const double raRad,
const double decRad,
const double eclRad,
double *lambdaRad,
double *betaRad);
192 void eclToEqu(
const double lambdaRad,
const double betaRad,
const double eclRad,
double *raRad,
double *decRad);
223 double asinh(
const double z);
249 QString
localeDateString(
const int year,
const int month,
const int day,
const int dayOfWeek,
const QString &fmt);
254 QString
localeDateString(
const int year,
const int month,
const int day,
const int dayOfWeek);
292 bool getJDFromDate(
double* newjd,
const int y,
const int m,
const int d,
const int h,
const int min,
const int s);
294 int numberOfDaysInMonthInYear(
const int month,
const int year);
295 bool changeDateTimeForRollover(
int oy,
int om,
int od,
int oh,
int omin,
int os,
296 int* ry,
int* rm,
int* rd,
int* rh,
int* rmin,
int* rs);
299 void debugQVariantMap(
const QVariant& m,
const QString& indent=
"",
const QString& key=
"");
306 return static_cast<float>(M_PI_2) - (x + x*x*x * (1.f/6.f + x*x * (3.f/40.f + 5.f/112.f * x*x)) );
313 (1.f + x*(1.f+ x/2.f*(1.f+ x/3.f*(1.f+x/4.f*(1.f+x/5.f))))):
314 1.f / (1.f -x*(1.f -x/2.f*(1.f- x/3.f*(1.f-x/4.f*(1.f-x/5.f)))));
322 for(
int i=0; i<3; i++)
324 max = dayColor[i] > max ? dayColor[i] : max;
326 return Vec3f(max, 0, 0);
626 template <
typename T>
int sign(T val)
628 return (T(0) < val) - (val < T(0));
657 double getDecYear(
const int year,
const int month,
const int day);
660 QByteArray
uncompress(
const QByteArray& data);
667 QByteArray
uncompress(QIODevice &device, qint64 maxBytes=-1);
670 inline double trunc(
double x)
672 return (x < 0 ? std::ceil(x) : std::floor(x));
675 inline double trunc(
double x) { return ::trunc(x); }
679 #endif // _STELUTILS_HPP_
double getDeltaTByMontenbruckPfleger(const double jDay)
Get Delta-T estimation for a given date.
A templatized 4d vector compatible with openGL.
QString decDegToDmsStr(const double angle)
Convert an angle in decimal degrees to a dms formatted string.
bool getDateTimeFromISO8601String(const QString &iso8601Date, int *y, int *m, int *d, int *h, int *min, float *s)
Parse an ISO8601 date string.
bool isPowerOfTwo(const int value)
Check if a number is a power of 2.
QTime jdFractionToQTime(const double jd)
Convert a fraction of a Julian Day to a QTime.
QString hoursToHmsStr(const double hours)
Convert decimal hours to hours, minutes, seconds.
double getDeltaTByMorrisonStephenson2004(const double jDay)
Get Delta-T estimation for a given date.
double getDeltaTByIslamSadiqQureshi(const double jDay)
Get Delta-T estimation for a given date.
QString vec4dToStr(const Vec4d &v)
Converts a Vec4d to a string in the same format that can be read by strToVec4d.
void equToEcl(const double raRad, const double decRad, const double eclRad, double *lambdaRad, double *betaRad)
Coordinate Transformation from equatorial to ecliptical.
double getJDFromSystem()
Get the current Julian Date from system time.
double getDeltaTByJPLHorizons(const double jDay)
Get Delta-T estimation for a given date.
void rectToSphe(double *lng, double *lat, const Vec3d &v)
Convert from spherical coordinates to Rectangular direction.
double getDeltaTByReijs(const double jDay)
Get Delta-T estimation for a given date.
Vec3f strToVec3f(const QStringList &s)
Obtains a Vec3f from a string.
QString getApplicationName()
Return the full name of stellarium, i.e. "stellarium 0.9.0".
double dmsStrToRad(const QString &s)
Convert a dms formatted string to an angle in radian.
void spheToRect(const double lng, const double lat, Vec3d &v)
Convert from spherical coordinates to Rectangular direction.
void getTimeFromJulianDay(const double julianDay, int *hour, int *minute, int *second)
Make from julianDay an hour, minute, second.
double hmsToRad(const unsigned int h, const unsigned int m, const double s)
Convert an angle in hms format to radian.
double getDeltaTByEspenak(const double jDay)
Get Delta-T estimation for a given date.
QString getOperatingSystemInfo()
Return the name and the version of operating system, i.e. "Mac OS X 10.7".
float * ComputeCosSinRho(const int segments)
Compute cosines and sines around a half-circle which is split in "segments" parts.
float * ComputeCosSinTheta(const int slices)
Compute cosines and sines around a circle which is split in "segments" parts.
QString radToHmsStrAdapt(const double angle)
Convert an angle in radian to a hms formatted string.
QString vec3fToHtmlColor(const Vec3f &v)
Converts a Vec3f to HTML color notation.
double getDeltaTByBanjevic(const double jDay)
Get Delta-T estimation for a given date.
double getDecYear(const int year, const int month, const int day)
Compute date in decimal year format.
double getDeltaTByChaprontTouze(const double jDay)
Get Delta-T estimation for a given date.
QString localeDateString(const int year, const int month, const int day, const int dayOfWeek, const QString &fmt)
Format the date and day-of-week per the format in fmt (see QDateTime::toString()).
QDateTime jdToQDateTime(const double &jd)
Convert a julian day to a QDateTime.
Vec3f getNightColor(const Vec3f &dayColor)
Get a night mode version of a color.
double getMoonFluctuation(const double jDay)
Get value of the Moon fluctuation Source: The Rotation of the Earth, and the Secular Accelerations of...
void radToDecDeg(double rad, bool &sign, double °)
Convert an angle in radian to decimal degree.
double qDateTimeToJd(const QDateTime &dateTime)
Convert a QT QDateTime class to julian day.
void radToHms(double rad, unsigned int &h, unsigned int &m, double &s)
Convert an angle in radian to hms format.
double getDeltaTByMorrisonStephenson1982(const double jDay)
Get Delta-T estimation for a given date.
double getDeltaTByTuckermanGoldstine(const double jDay)
Get Delta-T estimation for a given date.
void decDegToDms(double angle, bool &sign, unsigned int &d, unsigned int &m, double &s)
Convert an angle in decimal degree to +-dms format.
Vec4d strToVec4d(const QStringList &s)
Like StelUtils::strToVec3f, but with 4 components and with double precision.
double getDeltaTByBorkowski(const double jDay)
Get Delta-T estimation for a given date.
double getDeltaTBySchmadelZech1988(const double jDay)
Get Delta-T estimation for a given date.
QString radToDecDegStr(const double angle, const int precision=4, const bool useD=false, const bool useC=false)
Convert an angle in radian to a decimal degree string.
QString getApplicationVersion()
Return the version of stellarium, i.e. "0.9.0".
QString julianDayToISO8601String(const double jd)
Format the given Julian Day in (UTC) ISO8601 date string.
double getDeltaTByChaprontMeeus(const double jDay)
Get Delta-T estimation for a given date.
float fastAcos(const float x)
Compute acos(x) The taylor serie is not accurate around x=1 and x=-1.
double getDeltaTBySchoch(const double jDay)
Get Delta-T estimation for a given date.
double getDeltaTByStephensonMorrison1984(const double jDay)
Get Delta-T estimation for a given date.
QString radToDmsStr(const double angle, const bool decimal=false, const bool useD=false)
Convert an angle in radian to a dms formatted string.
double getDeltaTBySchmadelZech1979(const double jDay)
Get Delta-T estimation for a given date.
double getDeltaTByKhalidSultanaZaidi(const double jDay)
Get Delta-T estimation for a given date.
double getDeltaTByIAU(const double jDay)
Get Delta-T estimation for a given date.
double getDeltaTByEspenakMeeus(const double jDay)
Get Delta-T estimation for a given date.
void radToDms(double rad, bool &sign, unsigned int &d, unsigned int &m, double &s)
Convert an angle in radian to +-dms format.
double dmsToRad(const int d, const unsigned int m, const double s)
Convert an angle in +-dms format to radian.
double calculateSiderealPeriod(const double SemiMajorAxis)
Calculate and return sidereal period in days from semi-major axis (in AU)
double getMoonSecularAcceleration(const double jDay, const double ndot)
Get Secular Acceleration estimation for a given year.
double getDeltaTByStephenson1997(const double jDay)
Get Delta-T estimation for a given date.
double getDeltaTByStephenson1978(const double jDay)
Get Delta-T estimation for a given date.
QString radToDmsStrAdapt(const double angle, const bool useD=false)
Convert an angle in radian to a dms formatted string.
double getDeltaTByAstronomicalEphemeris(const double jDay)
Get Delta-T estimation for a given date.
double getDeltaTByClemence(const double jDay)
Get Delta-T estimation for a given date.
double getDeltaTByMeeusSimons(const double jDay)
Get Delta-T estimation for a given date.
contains general purpose utility functions.
double getDecAngle(const QString &str)
Convert a string longitude, latitude, RA or Declination angle to radians.
int getBiggerPowerOfTwo(int value)
Return the first power of two bigger than the given value.
QString vec3fToStr(const Vec3f &v)
Converts a Vec3f to a string in the same format that can be read by strToVec3f.
void eclToEqu(const double lambdaRad, const double betaRad, const double eclRad, double *raRad, double *decRad)
Coordinate Transformation from ecliptical to equatorial.
long double secondsSinceStart()
Get the number of seconds since program start.
double getDeltaTByMullerStephenson(const double jDay)
Get Delta-T estimation for a given date.
double getDeltaTByStephensonMorrison1995(const double jDay)
Get Delta-T estimation for a given date.
float * ComputeCosSinRhoZone(const float dRho, const int segments, const float minAngle)
Compute cosines and sines around part of a circle (from top to bottom) which is split in "segments" p...
QString radToHmsStr(const double angle, const bool decimal=false)
Convert an angle in radian to a hms formatted string.
double getJulianDayFromISO8601String(const QString &iso8601Date, bool *ok)
Return the Julian Date matching the ISO8601 date string.
QByteArray uncompress(const QByteArray &data)
Uncompress gzip or zlib compressed data.
int sign(T val)
Sign function from http://stackoverflow.com/questions/1903954/is-there-a-standard-sign-function-signu...
double qTimeToJDFraction(const QTime &time)
Convert a time of day to the fraction of a Julian Day.
bool getJDFromDate(double *newjd, const int y, const int m, const int d, const int h, const int min, const int s)
Compute Julian day number from calendar date.
void getDateFromJulianDay(const double julianDay, int *year, int *month, int *day)
Make from julianDay a year, month, day for the Julian Date julianDay represents.
double getDeltaTStandardError(const double jDay)
Get the standard error (sigma) for the value of DeltaT.
double getDeltaTByReingoldDershowitz(const double jDay)
Get Delta-T estimation for a given date.
double getDeltaTByStephensonHoulden(const double jDay)
Get Delta-T estimation for a given date.
float fastExp(const float x)
Compute exp(x) for small exponents x.
Vec3f htmlColorToVec3f(const QString &c)
Converts a color in HTML notation to a Vec3f.
double asinh(const double z)
Return the inverse sinus hyperbolic of z.
float getGMTShiftFromQT(const double jd)
Return number of hours offset from GMT, using Qt functions.
void debugQVariantMap(const QVariant &m, const QString &indent="", const QString &key="")
Output a QVariantMap to qDebug(). Formats like a tree where there are nested objects.