LSST Applications g0f08755f38+82efc23009,g12f32b3c4e+e7bdf1200e,g1653933729+a8ce1bb630,g1a0ca8cf93+50eff2b06f,g28da252d5a+52db39f6a5,g2bbee38e9b+37c5a29d61,g2bc492864f+37c5a29d61,g2cdde0e794+c05ff076ad,g3156d2b45e+41e33cbcdc,g347aa1857d+37c5a29d61,g35bb328faa+a8ce1bb630,g3a166c0a6a+37c5a29d61,g3e281a1b8c+fb992f5633,g414038480c+7f03dfc1b0,g41af890bb2+11b950c980,g5fbc88fb19+17cd334064,g6b1c1869cb+12dd639c9a,g781aacb6e4+a8ce1bb630,g80478fca09+72e9651da0,g82479be7b0+04c31367b4,g858d7b2824+82efc23009,g9125e01d80+a8ce1bb630,g9726552aa6+8047e3811d,ga5288a1d22+e532dc0a0b,gae0086650b+a8ce1bb630,gb58c049af0+d64f4d3760,gc28159a63d+37c5a29d61,gcf0d15dbbd+2acd6d4d48,gd7358e8bfb+778a810b6e,gda3e153d99+82efc23009,gda6a2b7d83+2acd6d4d48,gdaeeff99f8+1711a396fd,ge2409df99d+6b12de1076,ge79ae78c31+37c5a29d61,gf0baf85859+d0a5978c5a,gf3967379c6+4954f8c433,gfb92a5be7c+82efc23009,gfec2e1e490+2aaed99252,w.2024.46
LSST Data Management Base Package
Loading...
Searching...
No Matches
UnitVector3d.h
Go to the documentation of this file.
1/*
2 * This file is part of sphgeom.
3 *
4 * Developed for the LSST Data Management System.
5 * This product includes software developed by the LSST Project
6 * (http://www.lsst.org).
7 * See the COPYRIGHT file at the top-level directory of this distribution
8 * for details of code ownership.
9 *
10 * This software is dual licensed under the GNU General Public License and also
11 * under a 3-clause BSD license. Recipients may choose which of these licenses
12 * to use; please see the files gpl-3.0.txt and/or bsd_license.txt,
13 * respectively. If you choose the GPL option then the following text applies
14 * (but note that there is still no warranty even if you opt for BSD instead):
15 *
16 * This program is free software: you can redistribute it and/or modify
17 * it under the terms of the GNU General Public License as published by
18 * the Free Software Foundation, either version 3 of the License, or
19 * (at your option) any later version.
20 *
21 * This program is distributed in the hope that it will be useful,
22 * but WITHOUT ANY WARRANTY; without even the implied warranty of
23 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24 * GNU General Public License for more details.
25 *
26 * You should have received a copy of the GNU General Public License
27 * along with this program. If not, see <http://www.gnu.org/licenses/>.
28 */
29
30#ifndef LSST_SPHGEOM_UNITVECTOR3D_H_
31#define LSST_SPHGEOM_UNITVECTOR3D_H_
32
35
36#include "LonLat.h"
37#include "Vector3d.h"
38
39
40namespace lsst {
41namespace sphgeom {
42
63public:
66 static UnitVector3d orthogonalTo(Vector3d const & v);
67
72 static UnitVector3d orthogonalTo(Vector3d const & v1, Vector3d const & v2);
73
79 static UnitVector3d northFrom(Vector3d const & v);
80
84 UnitVector3d u; u._v = Vector3d(-sin(a), cos(a), 0.0); return u;
85 }
86
90 UnitVector3d u; u._v = v; return u;
91 }
92
96 static UnitVector3d fromNormalized(double x, double y, double z) {
97 UnitVector3d u; u._v = Vector3d(x, y, z); return u;
98 }
99
100 static UnitVector3d X() {
101 return UnitVector3d();
102 }
103
104 static UnitVector3d Y() {
105 UnitVector3d u; u._v = Vector3d(0.0, 1.0, 0.0); return u;
106 }
107
108 static UnitVector3d Z() {
109 UnitVector3d u; u._v = Vector3d(0.0, 0.0, 1.0); return u;
110 }
111
113 UnitVector3d() : _v(1.0, 0.0, 0.0) {}
114
115 UnitVector3d(UnitVector3d const &v) = default;
116
119 explicit UnitVector3d(Vector3d const & v) : _v(v) {
120 _v.normalize();
121 }
122
123 UnitVector3d(double x, double y, double z) : _v(x, y, z) {
124 _v.normalize();
125 }
127
130 explicit UnitVector3d(LonLat const & p) {
131 *this = UnitVector3d(p.getLon(), p.getLat());
132 }
133
136 UnitVector3d(Angle lon, Angle lat);
137
141 operator Vector3d const & () const { return _v; }
142
143 bool operator==(Vector3d const & v) const { return _v == v; }
144 bool operator!=(Vector3d const & v) const { return _v != v; }
145
147 double const * getData() const { return _v.getData(); }
148
150 double operator()(int i) const { return _v(i); }
151
152 double x() const { return _v.x(); }
153
154 double y() const { return _v.y(); }
155
156 double z() const { return _v.z(); }
157
159 double dot(Vector3d const & v) const { return _v.dot(v); }
160
162 Vector3d cross(Vector3d const & v) const { return _v.cross(v); }
163
169 return (v + *this).cross(v - *this);
170 }
171
174 UnitVector3d u; u._v = -_v; return u;
175 }
176
179 Vector3d operator*(double s) const { return _v * s; }
180
183 Vector3d operator/(double s) const { return _v / s; }
184
186 Vector3d operator+(Vector3d const & v) const { return _v + v; }
187
190 Vector3d operator-(Vector3d const & v) const { return _v - v; }
191
194 Vector3d cwiseProduct(Vector3d const & v) const {
195 return _v.cwiseProduct(v);
196 }
197
201 return UnitVector3d(_v.rotatedAround(k, a));
202 }
203
204private:
205 Vector3d _v;
206};
207
208
209std::ostream & operator<<(std::ostream &, UnitVector3d const &);
210
211}} // namespace lsst::sphgeom
212
213#endif // LSST_SPHGEOM_UNITVECTOR3D_H_
This file contains a class representing spherical coordinates.
This file declares a class for representing vectors in ℝ³.
Angle represents an angle in radians.
Definition Angle.h:50
LonLat represents a spherical coordinate (longitude/latitude angle) pair.
Definition LonLat.h:55
Angle getLat() const
Definition LonLat.h:97
NormalizedAngle getLon() const
Definition LonLat.h:95
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:51
Vector3d cwiseProduct(Vector3d const &v) const
cwiseProduct returns the component-wise product of this vector and v.
Definition Vector3d.h:157
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:133
double dot(Vector3d const &v) const
dot returns the inner product of this vector and v.
Definition Vector3d.h:80
double const * getData() const
data returns a pointer to the 3 components of this vector.
Definition Vector3d.h:68
double x() const
Definition Vector3d.h:73
double y() const
Definition Vector3d.h:75
double normalize()
normalize scales this vector to have unit norm and returns its norm prior to scaling.
Definition Vector3d.cc:49
double z() const
Definition Vector3d.h:77
Vector3d cross(Vector3d const &v) const
cross returns the cross product of this vector and v.
Definition Vector3d.h:108
std::ostream & operator<<(std::ostream &, Angle const &)
Definition Angle.cc:41
double sin(Angle const &a)
Definition Angle.h:109
double cos(Angle const &a)
Definition Angle.h:110