21 template<jit::
float_scalar T,
bool SAFE_MATH=false>
22 class vector_quantity :
public std::enable_shared_from_this<vector_quantity<T, SAFE_MATH>> {
80 return x*
v2->get_x() +
91 std::shared_ptr<vector_quantity<T, SAFE_MATH>>
93 return std::make_shared<vector_quantity<T, SAFE_MATH>> (
y*
v2->get_z() -
z*
v2->get_y(),
94 z*
v2->get_x() -
x*
v2->get_z(),
95 x*
v2->get_y() -
y*
v2->get_x());
112 std::shared_ptr<vector_quantity<T, SAFE_MATH>>
unit() {
113 return std::make_shared<vector_quantity<T, SAFE_MATH>> (
x,
y,
z)/
length();
118 template<jit::
float_scalar T,
bool SAFE_MATH=false>
132 template<jit::
float_scalar T,
bool SAFE_MATH=false>
136 return std::make_shared<vector_quantity<T, SAFE_MATH>> (x, y, z);
151 template<jit::
float_scalar T, jit::
float_scalar L,
bool SAFE_MATH=false>
155 return std::make_shared<vector_quantity<T, SAFE_MATH>> (
constant<T, SAFE_MATH> (
static_cast<T
> (x)), y, z);
170 template<jit::
float_scalar T, jit::
float_scalar M,
bool SAFE_MATH=false>
174 return std::make_shared<vector_quantity<T, SAFE_MATH>> (x,
constant<T, SAFE_MATH> (
static_cast<T
> (y)), z);
189 template<jit::
float_scalar T, jit::
float_scalar R,
bool SAFE_MATH=false>
193 return std::make_shared<vector_quantity<T, SAFE_MATH>> (x, y,
constant<T, SAFE_MATH> (
static_cast<T
> (z)));
209 template<jit::
float_scalar T, jit::
float_scalar L, jit::
float_scalar M,
bool SAFE_MATH=false>
230 template<jit::
float_scalar T, jit::
float_scalar M, jit::
float_scalar R,
bool SAFE_MATH=false>
251 template<jit::
float_scalar T, jit::
float_scalar L, jit::
float_scalar R,
bool SAFE_MATH=false>
270 template<jit::
float_scalar T,
bool SAFE_MATH=false>
289 template<jit::
float_scalar T,
bool SAFE_MATH=false>
292 return vector(
l->get_x() +
r->get_x(),
293 l->get_y() +
r->get_y(),
294 l->get_z() +
r->get_z());
307 template<jit::
float_scalar T,
bool SAFE_MATH=false>
310 return vector(
l->get_x() -
r->get_x(),
311 l->get_y() -
r->get_y(),
312 l->get_z() -
r->get_z());
325 template<jit::
float_scalar T,
bool SAFE_MATH=false>
343 template<jit::
float_scalar T,
bool SAFE_MATH=false>
360 template<jit::
float_scalar T,
bool SAFE_MATH=false>
361 class matrix_quantity :
public std::enable_shared_from_this<matrix_quantity<T, SAFE_MATH>> {
398 template<jit::
float_scalar T,
bool SAFE_MATH=false>
412 template<jit::
float_scalar T,
bool SAFE_MATH=false>
416 return std::make_shared<matrix_quantity<T, SAFE_MATH>> (r1, r2, r3);
Class to represent matrix quantities.
Definition vector.hpp:361
matrix_quantity(shared_vector< T, SAFE_MATH > r1, shared_vector< T, SAFE_MATH > r2, shared_vector< T, SAFE_MATH > r3)
Construct a new matrix_quantity.
Definition vector.hpp:378
shared_vector< T, SAFE_MATH > r3
Third row of the matrix.
Definition vector.hpp:368
shared_vector< T, SAFE_MATH > r1
First row of the matrix.
Definition vector.hpp:364
shared_vector< T, SAFE_MATH > dot(shared_vector< T, SAFE_MATH > v)
Multiply matrix by vector.
Definition vector.hpp:390
shared_vector< T, SAFE_MATH > r2
Second row of the matrix.
Definition vector.hpp:366
Class to represent vector quantities.
Definition vector.hpp:22
shared_leaf< T, SAFE_MATH > y
Y component of the vector.
Definition vector.hpp:27
shared_leaf< T, SAFE_MATH > get_x() const
Get the x component.
Definition vector.hpp:49
std::shared_ptr< vector_quantity< T, SAFE_MATH > > cross(std::shared_ptr< vector_quantity< T, SAFE_MATH > > v2)
Vector cross product.
Definition vector.hpp:92
shared_leaf< T, SAFE_MATH > get_z() const
Get the z component.
Definition vector.hpp:68
shared_leaf< T, SAFE_MATH > get_y() const
Get the y component.
Definition vector.hpp:59
shared_leaf< T, SAFE_MATH > dot(std::shared_ptr< vector_quantity< T, SAFE_MATH > > v2)
Vector dot product.
Definition vector.hpp:79
shared_leaf< T, SAFE_MATH > length()
Get the length of the vector.
Definition vector.hpp:103
std::shared_ptr< vector_quantity< T, SAFE_MATH > > unit()
Get the unit vector.
Definition vector.hpp:112
shared_leaf< T, SAFE_MATH > z
Z component of the vector.
Definition vector.hpp:29
vector_quantity(shared_leaf< T, SAFE_MATH > x, shared_leaf< T, SAFE_MATH > y, shared_leaf< T, SAFE_MATH > z)
Construct a new vector_quantity.
Definition vector.hpp:39
shared_leaf< T, SAFE_MATH > x
X component of the vector.
Definition vector.hpp:25
Name space for graph nodes.
Definition arithmetic.hpp:13
shared_leaf< T, SAFE_MATH > operator*(shared_leaf< T, SAFE_MATH > l, shared_leaf< T, SAFE_MATH > r)
Build multiply node from two leaves.
Definition arithmetic.hpp:2666
constexpr shared_leaf< T, SAFE_MATH > zero()
Forward declare for zero.
Definition node.hpp:994
shared_leaf< T, SAFE_MATH > operator/(shared_leaf< T, SAFE_MATH > l, shared_leaf< T, SAFE_MATH > r)
Build divide node from two leaves.
Definition arithmetic.hpp:3631
std::shared_ptr< vector_quantity< T, SAFE_MATH > > shared_vector
Convenience type for shared vector quantities.
Definition vector.hpp:119
shared_leaf< T, SAFE_MATH > operator+(shared_leaf< T, SAFE_MATH > l, shared_leaf< T, SAFE_MATH > r)
Build add node from two leaves.
Definition arithmetic.hpp:774
shared_leaf< T, SAFE_MATH > operator-(shared_leaf< T, SAFE_MATH > l, shared_leaf< T, SAFE_MATH > r)
Build subtract node from two leaves.
Definition arithmetic.hpp:1598
shared_vector< T, SAFE_MATH > vector(shared_leaf< T, SAFE_MATH > x, shared_leaf< T, SAFE_MATH > y, shared_leaf< T, SAFE_MATH > z)
Build a shared vector quantity.
Definition vector.hpp:133
shared_leaf< T, SAFE_MATH > sqrt(shared_leaf< T, SAFE_MATH > x)
Define sqrt convience function.
Definition math.hpp:279
shared_matrix< T, SAFE_MATH > matrix(shared_vector< T, SAFE_MATH > r1, shared_vector< T, SAFE_MATH > r2, shared_vector< T, SAFE_MATH > r3)
Build a shared vector quantity.
Definition vector.hpp:413
std::shared_ptr< matrix_quantity< T, SAFE_MATH > > shared_matrix
Convenience type for shared vector quantities.
Definition vector.hpp:399
std::shared_ptr< leaf_node< T, SAFE_MATH > > shared_leaf
Convenience type alias for shared leaf nodes.
Definition node.hpp:673
Base nodes of graph computation framework.