63 explicit RA(
double inDegrees) :
67 if (inDegrees < 0 || inDegrees >= 360)
73 const double decMinutes = (degrees_ -
static_cast<double>(hours_) * 15.) * 4.;
75 seconds_ =
static_cast<double>((decMinutes -
static_cast<double>(minutes_)) * 60.);
91 degrees_ =
static_cast<double>(hours_) * 15. +
static_cast<double>(minutes_) / 4. + seconds_ / 240.;
150 [[nodiscard]] std::string
str()
const
187 return !(*
this == inRhs);
196 friend std::ostream&
operator<<(std::ostream& inStream,
const RA& inRa)
198 inStream << inRa.
str();
206 double seconds_{ 0. };
207 double degrees_{ 0. };
208 double radians_{ 0. };
234 explicit Dec(
double inDegrees) :
238 if (inDegrees < -90 || inDegrees > 90)
244 const double absDegrees =
std::abs(degrees_);
247 const double decMinutes = (absDegrees -
static_cast<double>(degreesWhole_)) * 60.;
249 seconds_ = (decMinutes -
static_cast<double>(minutes_)) * 60.;
262 degreesWhole_(inDegrees),
266 degrees_ =
static_cast<double>(degreesWhole_) +
static_cast<double>(minutes_) / 60. + seconds_ / 3600.;
309 return degreesWhole_;
337 [[nodiscard]] std::string
str()
const
340 std::string out =
"Dec dms: " + strSign +
utils::num2str(degreesWhole_) +
" degrees, " +
375 return !(*
this == inRhs);
388 inStream << inDec.
str();
395 uint8 degreesWhole_{ 0 };
397 double seconds_{ 0. };
398 double degrees_{ 0. };
399 double radians_{ 0. };
440 uint8 inDecDegreesWhole,
442 double inDecSeconds) :
443 ra_(inRaHours, inRaMinutes, inRaSeconds),
444 dec_(inSign, inDecDegreesWhole, inDecMinutes, inDecSeconds)
483 x_(inCartesianVector.
x),
484 y_(inCartesianVector.
y),
485 z_(inCartesianVector.
z)
496 x_(inCartesianVector.
x),
497 y_(inCartesianVector.
y),
498 z_(inCartesianVector.
z)
510 if (inCartesianVector.
size() != 3)
515 x_ = inCartesianVector[0];
516 y_ = inCartesianVector[1];
517 z_ = inCartesianVector[2];
527 [[nodiscard]]
const Dec&
dec() const noexcept
537 [[nodiscard]]
const RA&
ra() const noexcept
547 [[nodiscard]]
double x() const noexcept
557 [[nodiscard]]
double y() const noexcept
567 [[nodiscard]]
double z() const noexcept
617 return std::acos(
dot(
xyz(), inOtherCelestial.
xyz()).item());
630 if (inVector.
size() != 3)
643 [[nodiscard]] std::string
str()
const
645 std::string returnStr;
646 returnStr = ra_.
str();
647 returnStr += dec_.
str();
648 returnStr +=
"Cartesian = " +
xyz().
str();
669 return ra_ == inRhs.ra_ && dec_ == inRhs.dec_;
681 return !(*
this == inRhs);
694 inStream << inCoord.
str();
709 void cartesianToPolar()
711 double degreesRa =
rad2deg(std::atan2(y_, x_));
719 const double degreesDec =
rad2deg(std::asin(z_ / r));
720 dec_ = Dec(degreesDec);
726 void polarToCartesian() noexcept
#define THROW_INVALID_ARGUMENT_ERROR(msg)
Definition: Error.hpp:37
size_type size() const noexcept
Definition: NdArrayCore.hpp:4524
self_type flatten() const
Definition: NdArrayCore.hpp:2847
std::string str() const
Definition: NdArrayCore.hpp:4582
Holds a 3D vector.
Definition: Vec3.hpp:51
Cartensian coordinates.
Definition: Cartesian.hpp:45
Holds a full celestial Celestial object.
Definition: Celestial.hpp:405
Celestial(uint8 inRaHours, uint8 inRaMinutes, double inRaSeconds, Dec::Sign inSign, uint8 inDecDegreesWhole, uint8 inDecMinutes, double inDecSeconds)
Definition: Celestial.hpp:436
Celestial(double inX, double inY, double inZ)
Definition: Celestial.hpp:469
friend std::ostream & operator<<(std::ostream &inStream, const Celestial &inCoord)
Definition: Celestial.hpp:692
double y() const noexcept
Definition: Celestial.hpp:557
const RA & ra() const noexcept
Definition: Celestial.hpp:537
Celestial(const Cartesian &inCartesianVector)
Definition: Celestial.hpp:482
double z() const noexcept
Definition: Celestial.hpp:567
bool operator==(const Celestial &inRhs) const noexcept
Definition: Celestial.hpp:667
Celestial(const RA &inRA, const Dec &inDec) noexcept
Definition: Celestial.hpp:455
Celestial(const NdArray< double > &inCartesianVector)
Definition: Celestial.hpp:508
double degreeSeperation(const NdArray< double > &inVector) const
Definition: Celestial.hpp:603
double radianSeperation(const Celestial &inOtherCelestial) const
Definition: Celestial.hpp:615
Celestial(double inRaDegrees, double inDecDegrees)
Definition: Celestial.hpp:418
std::string str() const
Definition: Celestial.hpp:643
NdArray< double > xyz() const
Definition: Celestial.hpp:577
const Dec & dec() const noexcept
Definition: Celestial.hpp:527
bool operator!=(const Celestial &inRhs) const noexcept
Definition: Celestial.hpp:679
double degreeSeperation(const Celestial &inOtherCelestial) const
Definition: Celestial.hpp:590
Celestial(const Vec3 &inCartesianVector)
Definition: Celestial.hpp:495
double x() const noexcept
Definition: Celestial.hpp:547
double radianSeperation(const NdArray< double > &inVector) const
Definition: Celestial.hpp:628
void print() const
Definition: Celestial.hpp:655
Holds a Declination object.
Definition: Celestial.hpp:214
double degrees() const noexcept
Definition: Celestial.hpp:287
Sign sign() const noexcept
Definition: Celestial.hpp:277
friend std::ostream & operator<<(std::ostream &inStream, const Dec &inDec)
Definition: Celestial.hpp:386
double radians() const noexcept
Definition: Celestial.hpp:297
uint8 minutes() const noexcept
Definition: Celestial.hpp:317
void print() const
Definition: Celestial.hpp:349
Dec(Sign inSign, uint8 inDegrees, uint8 inMinutes, double inSeconds) noexcept
Definition: Celestial.hpp:260
uint8 degreesWhole() const noexcept
Definition: Celestial.hpp:307
std::string str() const
Definition: Celestial.hpp:337
bool operator==(const Dec &inRhs) const noexcept
Definition: Celestial.hpp:361
double seconds() const noexcept
Definition: Celestial.hpp:327
Dec(double inDegrees)
Definition: Celestial.hpp:234
bool operator!=(const Dec &inRhs) const noexcept
Definition: Celestial.hpp:373
Sign
Struct Enum for positive or negative Dec angle.
Definition: Celestial.hpp:219
Holds a right ascension object.
Definition: Celestial.hpp:51
uint8 minutes() const noexcept
Definition: Celestial.hpp:130
double radians() const noexcept
Definition: Celestial.hpp:100
double seconds() const noexcept
Definition: Celestial.hpp:140
void print() const
Definition: Celestial.hpp:161
double degrees() const noexcept
Definition: Celestial.hpp:110
friend std::ostream & operator<<(std::ostream &inStream, const RA &inRa)
Definition: Celestial.hpp:196
uint8 hours() const noexcept
Definition: Celestial.hpp:120
RA(double inDegrees)
Definition: Celestial.hpp:63
bool operator==(const RA &inRhs) const noexcept
Definition: Celestial.hpp:173
std::string str() const
Definition: Celestial.hpp:150
bool operator!=(const RA &inRhs) const noexcept
Definition: Celestial.hpp:185
std::string num2str(dtype inNumber)
Definition: num2str.hpp:44
bool essentiallyEqual(dtype inValue1, dtype inValue2) noexcept
Definition: essentiallyEqual.hpp:49
constexpr dtype sqr(dtype inValue) noexcept
Definition: sqr.hpp:42
constexpr auto deg2rad(dtype inValue) noexcept
Definition: deg2rad.hpp:47
auto sin(dtype inValue) noexcept
Definition: sin.hpp:49
NdArray< dtype > dot(const NdArray< dtype > &inArray1, const NdArray< dtype > &inArray2)
Definition: dot.hpp:47
auto abs(dtype inValue) noexcept
Definition: abs.hpp:49
auto cos(dtype inValue) noexcept
Definition: cos.hpp:49
dtype floor(dtype inValue) noexcept
Definition: floor.hpp:48
constexpr auto rad2deg(dtype inValue) noexcept
Definition: rad2deg.hpp:48
auto sqrt(dtype inValue) noexcept
Definition: sqrt.hpp:48
std::uint8_t uint8
Definition: Types.hpp:42