LSST Applications 26.0.0,g0265f82a02+6660c170cc,g07994bdeae+30b05a742e,g0a0026dc87+17526d298f,g0a60f58ba1+17526d298f,g0e4bf8285c+96dd2c2ea9,g0ecae5effc+c266a536c8,g1e7d6db67d+6f7cb1f4bb,g26482f50c6+6346c0633c,g2bbee38e9b+6660c170cc,g2cc88a2952+0a4e78cd49,g3273194fdb+f6908454ef,g337abbeb29+6660c170cc,g337c41fc51+9a8f8f0815,g37c6e7c3d5+7bbafe9d37,g44018dc512+6660c170cc,g4a941329ef+4f7594a38e,g4c90b7bd52+5145c320d2,g58be5f913a+bea990ba40,g635b316a6c+8d6b3a3e56,g67924a670a+bfead8c487,g6ae5381d9b+81bc2a20b4,g93c4d6e787+26b17396bd,g98cecbdb62+ed2cb6d659,g98ffbb4407+81bc2a20b4,g9ddcbc5298+7f7571301f,ga1e77700b3+99e9273977,gae46bcf261+6660c170cc,gb2715bf1a1+17526d298f,gc86a011abf+17526d298f,gcf0d15dbbd+96dd2c2ea9,gdaeeff99f8+0d8dbea60f,gdb4ec4c597+6660c170cc,ge23793e450+96dd2c2ea9,gf041782ebf+171108ac67
LSST Data Management Base Package
Loading...
Searching...
No Matches
UnitVector3d.h
Go to the documentation of this file.
1/*
2 * LSST Data Management System
3 * Copyright 2014-2015 AURA/LSST.
4 *
5 * This product includes software developed by the
6 * LSST Project (http://www.lsst.org/).
7 *
8 * This program is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation, either version 3 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the LSST License Statement and
19 * the GNU General Public License along with this program. If not,
20 * see <https://www.lsstcorp.org/LegalNotices/>.
21 */
22
23#ifndef LSST_SPHGEOM_UNITVECTOR3D_H_
24#define LSST_SPHGEOM_UNITVECTOR3D_H_
25
28
29#include "LonLat.h"
30#include "Vector3d.h"
31
32
33namespace lsst {
34namespace sphgeom {
35
56public:
59 static UnitVector3d orthogonalTo(Vector3d const & v);
60
65 static UnitVector3d orthogonalTo(Vector3d const & v1, Vector3d const & v2);
66
72 static UnitVector3d northFrom(Vector3d const & v);
73
77 UnitVector3d u; u._v = Vector3d(-sin(a), cos(a), 0.0); return u;
78 }
79
83 UnitVector3d u; u._v = v; return u;
84 }
85
89 static UnitVector3d fromNormalized(double x, double y, double z) {
90 UnitVector3d u; u._v = Vector3d(x, y, z); return u;
91 }
92
93 static UnitVector3d X() {
94 return UnitVector3d();
95 }
96
97 static UnitVector3d Y() {
98 UnitVector3d u; u._v = Vector3d(0.0, 1.0, 0.0); return u;
99 }
100
101 static UnitVector3d Z() {
102 UnitVector3d u; u._v = Vector3d(0.0, 0.0, 1.0); return u;
103 }
104
106 UnitVector3d() : _v(1.0, 0.0, 0.0) {}
107
108 UnitVector3d(UnitVector3d const &v) = default;
109
112 explicit UnitVector3d(Vector3d const & v) : _v(v) {
113 _v.normalize();
114 }
115
116 UnitVector3d(double x, double y, double z) : _v(x, y, z) {
117 _v.normalize();
118 }
120
123 explicit UnitVector3d(LonLat const & p) {
124 *this = UnitVector3d(p.getLon(), p.getLat());
125 }
126
129 UnitVector3d(Angle lon, Angle lat);
130
134 operator Vector3d const & () const { return _v; }
135
136 bool operator==(Vector3d const & v) const { return _v == v; }
137 bool operator!=(Vector3d const & v) const { return _v != v; }
138
140 double const * getData() const { return _v.getData(); }
141
143 double operator()(int i) const { return _v(i); }
144
145 double x() const { return _v.x(); }
146
147 double y() const { return _v.y(); }
148
149 double z() const { return _v.z(); }
150
152 double dot(Vector3d const & v) const { return _v.dot(v); }
153
155 Vector3d cross(Vector3d const & v) const { return _v.cross(v); }
156
162 return (v + *this).cross(v - *this);
163 }
164
167 UnitVector3d u; u._v = -_v; return u;
168 }
169
172 Vector3d operator*(double s) const { return _v * s; }
173
176 Vector3d operator/(double s) const { return _v / s; }
177
179 Vector3d operator+(Vector3d const & v) const { return _v + v; }
180
183 Vector3d operator-(Vector3d const & v) const { return _v - v; }
184
187 Vector3d cwiseProduct(Vector3d const & v) const {
188 return _v.cwiseProduct(v);
189 }
190
194 return UnitVector3d(_v.rotatedAround(k, a));
195 }
196
197private:
198 Vector3d _v;
199};
200
201
202std::ostream & operator<<(std::ostream &, UnitVector3d const &);
203
204}} // namespace lsst::sphgeom
205
206#endif // LSST_SPHGEOM_UNITVECTOR3D_H_
This file contains a class representing spherical coordinates.
table::Key< int > a
This file declares a class for representing vectors in ℝ³.
Angle represents an angle in radians.
Definition Angle.h:43
LonLat represents a spherical coordinate (longitude/latitude angle) pair.
Definition LonLat.h:48
Angle getLat() const
Definition LonLat.h:90
NormalizedAngle getLon() const
Definition LonLat.h:88
NormalizedAngle is an angle that lies in the range [0, 2π), with one exception - a NormalizedAngle ca...
UnitVector3d is a unit vector in ℝ³ with components stored in double precision.
static UnitVector3d Z()
double dot(Vector3d const &v) const
dot returns the inner product of this unit vector and v.
UnitVector3d operator-() const
The unary minus operator negates every component of this unit vector.
Vector3d robustCross(UnitVector3d const &v) const
a.robustCross(b) is (b + a).cross(b - a) - twice the cross product of a and b.
Vector3d cwiseProduct(Vector3d const &v) const
cwiseProduct returns the component-wise product of this unit vector and v.
Vector3d operator+(Vector3d const &v) const
The addition operator returns the sum of this unit vector and v.
static UnitVector3d fromNormalized(double x, double y, double z)
fromNormalized returns the unit vector with the given components, which are assumed to correspond to ...
UnitVector3d(double x, double y, double z)
static UnitVector3d orthogonalTo(NormalizedAngle const &a)
orthogonalTo returns the unit vector orthogonal to the meridian with the given longitude.
UnitVector3d(Vector3d const &v)
static UnitVector3d fromNormalized(Vector3d const &v)
fromNormalized returns the unit vector equal to v, which is assumed to be normalized.
UnitVector3d rotatedAround(UnitVector3d const &k, Angle a) const
rotatedAround returns a copy of this unit vector, rotated around the unit vector k by angle a accordi...
static UnitVector3d Y()
static UnitVector3d X()
Vector3d operator*(double s) const
The multiplication operator returns the component-wise product of this unit vector with scalar s.
Vector3d operator/(double s) const
The division operator returns the component-wise quotient of this unit vector with scalar s.
UnitVector3d()
The default constructor creates a unit vector equal to (1, 0, 0).
bool operator==(Vector3d const &v) const
Vector3d operator-(Vector3d const &v) const
The subtraction operator returns the difference between this unit vector and v.
static UnitVector3d orthogonalTo(Vector3d const &v)
orthogonalTo returns an arbitrary unit vector that is orthogonal to v.
Vector3d cross(Vector3d const &v) const
cross returns the cross product of this unit vector and v.
UnitVector3d(UnitVector3d const &v)=default
UnitVector3d(LonLat const &p)
This constructor creates the unit vector corresponding to the point p on the unit sphere.
bool operator!=(Vector3d const &v) const
double const * getData() const
getData returns a pointer to the 3 components of this unit vector.
double operator()(int i) const
The function call operator returns the i-th component of this vector.
static UnitVector3d northFrom(Vector3d const &v)
northFrom returns the unit vector orthogonal to v that points "north" from v.
Vector3d is a vector in ℝ³ with components stored in double precision.
Definition Vector3d.h:44
Vector3d cwiseProduct(Vector3d const &v) const
cwiseProduct returns the component-wise product of this vector and v.
Definition Vector3d.h:150
Vector3d rotatedAround(UnitVector3d const &k, Angle a) const
rotatedAround returns a copy of this vector, rotated around the unit vector k by angle a according to...
Definition Vector3d.cc:125
double dot(Vector3d const &v) const
dot returns the inner product of this vector and v.
Definition Vector3d.h:73
double const * getData() const
data returns a pointer to the 3 components of this vector.
Definition Vector3d.h:61
double x() const
Definition Vector3d.h:66
double y() const
Definition Vector3d.h:68
double normalize()
normalize scales this vector to have unit norm and returns its norm prior to scaling.
Definition Vector3d.cc:41
double z() const
Definition Vector3d.h:70
Vector3d cross(Vector3d const &v) const
cross returns the cross product of this vector and v.
Definition Vector3d.h:101
std::ostream & operator<<(std::ostream &, Angle const &)
Definition Angle.cc:34