1#ifndef __stir_BasicCoordinate_H__
2#define __stir_BasicCoordinate_H__
34#include <boost/operators.hpp>
52template <
int num_dimensions,
typename coordT>
55 boost::equality_comparable<BasicCoordinate<num_dimensions, coordT>
62 typedef std::random_access_iterator_tag iterator_category;
63 typedef coordT value_type;
64 typedef value_type& reference;
65 typedef const value_type& const_reference;
66 typedef value_type* iterator;
67 typedef value_type* pointer;
68 typedef const value_type* const_iterator;
69 typedef std::ptrdiff_t difference_type;
70 typedef std::size_t size_type;
87 template <
typename coordT2>
90 for (
int i = 1; i <= num_dimensions; ++i)
91 (*
this)[i] =
static_cast<coordT
>(c[i]);
121 inline coordT&
at(
const int d);
124 inline coordT
const&
at(
const int d)
const;
127 inline bool empty()
const
134 inline static int get_min_index();
135 inline static int get_max_index();
136 inline static unsigned size();
138 inline void fill(
const coordT&);
173 inline iterator begin();
174 inline const_iterator begin()
const;
175 inline iterator end();
176 inline const_iterator end()
const;
182 coordT coords[num_dimensions];
210inline BasicCoordinate<5, T> make_coordinate(
const T& a1,
const T& a2,
const T& a3,
const T& a4,
const T& a5);
213inline BasicCoordinate<6, T> make_coordinate(
const T& a1,
const T& a2,
const T& a3,
const T& a4,
const T& a5,
const T& a6);
225template <
int num_dimensions,
typename coordT>
231template <
int num_dimensions,
typename coordT>
237template <
int num_dimensions,
typename coordT>
243template <
int num_dimensions,
typename coordT>
250template <
int num_dimensions,
typename coordT>
257template <
int num_dimensions,
typename coordT>
262template <
int num_dimensions,
class coordT>
267template <
int num_dimensions,
class coordT>
272template <
int num_dimensions,
typename coordT>
277template <
int num_dimensions>
(inline) implementations for stir::BasicCoordinate
class BasicCoordinate<int num_dimensions, typename coordT> defines num_dimensions -dimensional coordi...
Definition BasicCoordinate.h:57
BasicCoordinate()
default constructor. NO initialisation
Definition BasicCoordinate.inl:136
BasicCoordinate & operator=(const BasicCoordinate &c)
assignment
Definition BasicCoordinate.inl:121
bool operator==(const BasicCoordinate &c) const
comparison
Definition BasicCoordinate.inl:111
coordT & operator[](const int d)
Return value at index t (which is 1-based)
Definition BasicCoordinate.inl:72
coordT const & at(const int d) const
Return value at index t (which is 1-based) if the BasicCoordinate object is const,...
Definition BasicCoordinate.inl:99
coordT const & operator[](const int d) const
Return value at index t (which is 1-based) if the BasicCoordinate object is const.
Definition BasicCoordinate.inl:81
void fill(const coordT &)
fill elements with value
Definition BasicCoordinate.inl:130
BasicCoordinate(const coordT &)
constructor that sets all elements equal to value.
Definition BasicCoordinate.inl:140
BasicCoordinate(const BasicCoordinate< num_dimensions, coordT2 > &c)
constructor from different type of coordT
Definition BasicCoordinate.h:88
coordT & at(const int d)
Return value at index t (which is 1-based), but with range checking (throws std::out_of_range)
Definition BasicCoordinate.inl:90
bool operator<(const BasicCoordinate &c) const
less-than (using lexical ordering)
Definition BasicCoordinate.inl:535
basic configuration include file
BasicCoordinate< num_dimensions+1, coordT > join(const coordT &a, const BasicCoordinate< num_dimensions, coordT > &c)
make a longer BasicCoordinate, by prepending c with the single coordT
Definition BasicCoordinate.inl:447
BasicCoordinate< num_dimensions - 1, coordT > cut_last_dimension(const BasicCoordinate< num_dimensions, coordT > &c)
make a shorter BasicCoordinate, by cutting the last element from c
Definition BasicCoordinate.inl:458
coordT inner_product(const BasicCoordinate< num_dimensions, coordT > &p1, const BasicCoordinate< num_dimensions, coordT > &p2)
compute sum_i p1[i] * p2[i]
Definition BasicCoordinate.inl:408
double norm(const BasicCoordinate< num_dimensions, coordT > &p1)
compute sqrt(inner_product(p1,p1))
Definition BasicCoordinate.inl:426
double angle(const BasicCoordinate< num_dimensions, coordT > &p1, const BasicCoordinate< num_dimensions, coordT > &p2)
compute angle between 2 directions
Definition BasicCoordinate.inl:440
BasicCoordinate< num_dimensions, float > convert_int_to_float(const BasicCoordinate< num_dimensions, int > &cint)
converts a BasicCoordinate<int> to BasicCoordinate<float>
Definition BasicCoordinate.inl:486
double norm_squared(const BasicCoordinate< num_dimensions, coordT > &p1)
compute (inner_product(p1,p1))
Definition BasicCoordinate.inl:415
BasicCoordinate< num_dimensions - 1, coordT > cut_first_dimension(const BasicCoordinate< num_dimensions, coordT > &c)
make a shorter BasicCoordinate, by cutting the first element from c
Definition BasicCoordinate.inl:477
double cos_angle(const BasicCoordinate< num_dimensions, coordT > &p1, const BasicCoordinate< num_dimensions, coordT > &p2)
compute cos of the angle between 2 directions
Definition BasicCoordinate.inl:433
Boost class to define all comparison operators given only 2 (see operators.hpp)
Definition doxygen_doc_for_boost.h:58