lsst.sphgeom gbd998247f1+585e252eca
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 ℝ³.
Definition Angle.h:50
Definition LonLat.h:55
Definition NormalizedAngle.h:50
Definition UnitVector3d.h:62
double dot(Vector3d const &v) const
dot returns the inner product of this unit vector and v.
Definition UnitVector3d.h:159
UnitVector3d operator-() const
The unary minus operator negates every component of this unit vector.
Definition UnitVector3d.h:173
Vector3d robustCross(UnitVector3d const &v) const
Definition UnitVector3d.h:168
Vector3d cwiseProduct(Vector3d const &v) const
Definition UnitVector3d.h:194
Vector3d operator+(Vector3d const &v) const
The addition operator returns the sum of this unit vector and v.
Definition UnitVector3d.h:186
static UnitVector3d fromNormalized(double x, double y, double z)
Definition UnitVector3d.h:96
static UnitVector3d orthogonalTo(NormalizedAngle const &a)
Definition UnitVector3d.h:83
UnitVector3d(Vector3d const &v)
Definition UnitVector3d.h:119
static UnitVector3d fromNormalized(Vector3d const &v)
Definition UnitVector3d.h:89
UnitVector3d rotatedAround(UnitVector3d const &k, Angle a) const
Definition UnitVector3d.h:200
Vector3d operator*(double s) const
Definition UnitVector3d.h:179
Vector3d operator/(double s) const
Definition UnitVector3d.h:183
UnitVector3d()
The default constructor creates a unit vector equal to (1, 0, 0).
Definition UnitVector3d.h:113
Vector3d operator-(Vector3d const &v) const
Definition UnitVector3d.h:190
static UnitVector3d orthogonalTo(Vector3d const &v)
Definition UnitVector3d.cc:41
Vector3d cross(Vector3d const &v) const
cross returns the cross product of this unit vector and v.
Definition UnitVector3d.h:162
UnitVector3d(LonLat const &p)
Definition UnitVector3d.h:130
double const * getData() const
getData returns a pointer to the 3 components of this unit vector.
Definition UnitVector3d.h:147
double operator()(int i) const
The function call operator returns the i-th component of this vector.
Definition UnitVector3d.h:150
static UnitVector3d northFrom(Vector3d const &v)
Definition UnitVector3d.cc:58
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
Definition Vector3d.cc:132
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 normalize()
Definition Vector3d.cc:48
Vector3d cross(Vector3d const &v) const
cross returns the cross product of this vector and v.
Definition Vector3d.h:108