11#include <isce3/except/Error.h>
14#include "DenseMatrix.h"
17namespace isce3 {
namespace core {
25 Basis() : _x0 {1, 0, 0}, _x1 {0, 1, 0}, _x2 {0, 0, 1} {}
34 Basis(
const Vec3&
x0,
const Vec3&
x1,
const Vec3&
x2,
double tol = 1e-8)
35 : _x0(
x0), _x1(
x1), _x2(
x2)
39 Eigen::Array33d resid = b.transpose().dot(b) - Mat3::Identity();
40 if (not(resid.abs() < tol).all()) {
42 throw isce3::except::InvalidArgument(
43 ISCE_SRCINFO(),
"Basis is not unitary/orthogonal");
50 CUDA_HOSTDEV
explicit Basis(
const Vec3& p,
const Vec3& v)
52 const Vec3 n = -p.normalized();
53 const Vec3 c = n.cross(v).normalized();
54 const Vec3 t = c.cross(n).normalized();
61 CUDA_HOSTDEV
const Vec3&
x0()
const {
return _x0; }
64 CUDA_HOSTDEV
const Vec3&
x1()
const {
return _x1; }
67 CUDA_HOSTDEV
const Vec3&
x2()
const {
return _x2; }
70 CUDA_HOSTDEV
void x0(
const Vec3&
x0) { _x0 =
x0; }
73 CUDA_HOSTDEV
void x1(
const Vec3&
x1) { _x1 =
x1; }
76 CUDA_HOSTDEV
void x2(
const Vec3&
x2) { _x2 =
x2; }
86 CUDA_HOSTDEV
inline Vec3
project(
const Vec3& vec)
const
88 return Vec3 {_x0.dot(vec), _x1.dot(vec), _x2.dot(vec)};
99 inline void combine(
const Vec3& vec, Vec3& res)
const
101 for (
int ii = 0; ii < 3; ii++) {
102 res[ii] = vec[0] * _x0[ii] + vec[1] * _x1[ii] + vec[2] * _x2[ii];
130Vec3 velocityECI(
const Vec3& position,
const Vec3& velocityECF);
138Basis geodeticTCN(
const Vec3& x,
const Vec3& v,
const Ellipsoid& ellipsoid);
148EulerAngles factoredYawPitchRoll(
const Quaternion& q,
const Vec3& x,
149 const Vec3& v,
const Ellipsoid& ellipsoid);
159EulerAngles factoredYawPitchRoll(
const Quaternion& q,
const Vec3& x,
Simple class to store three-dimensional basis vectors.
Definition Basis.h:20
CUDA_HOSTDEV Basis()
Default to identity basis.
Definition Basis.h:25
Data structure to store Ellipsoid information.
Definition Ellipsoid.h:20
CUDA_HOSTDEV void x0(const Vec3 &x0)
Set the first basis vector.
Definition Basis.h:70
void combine(const Vec3 &vec, Vec3 &res) const
Combine the basis with given weights.
Definition Basis.h:99
CUDA_HOSTDEV const Vec3 & x2() const
Return third basis vector.
Definition Basis.h:67
CUDA_HOSTDEV Basis()
Default to identity basis.
Definition Basis.h:25
CUDA_HOSTDEV const Vec3 & x0() const
Return first basis vector.
Definition Basis.h:61
CUDA_HOSTDEV void x2(const Vec3 &x2)
Set the third basis vecot.
Definition Basis.h:76
CUDA_HOSTDEV Vec3 project(const Vec3 &vec) const
Project a given vector onto basis.
Definition Basis.h:86
CUDA_HOSTDEV const Vec3 & x1() const
Return second basis vector.
Definition Basis.h:64
CUDA_HOSTDEV void x1(const Vec3 &x1)
Set the second basis vector.
Definition Basis.h:73
CUDA_HOSTDEV Basis(const Vec3 &p, const Vec3 &v)
Geocentric TCN constructor.
Definition Basis.h:50
CUDA_HOST Basis(const Vec3 &x0, const Vec3 &x1, const Vec3 &x2, double tol=1e-8)
Constructor with basis vectors.
Definition Basis.h:34
CUDA_HOSTDEV Mat3 toRotationMatrix() const
Convert to matrix, vectors (x0, x1, x2) as columns (0, 1, 2).
Definition Basis.h:109
base interpolator is an abstract base class
Definition BinarySearchFunc.cpp:5