139template <
int num_dimensions,
class coordT>
146template <
int num_dimensions,
class coordT>
153template <
int num_dimensions,
class coordT>
155BasicCoordinate<num_dimensions, coordT>::get_min_index()
160template <
int num_dimensions,
class coordT>
162BasicCoordinate<num_dimensions, coordT>::get_max_index()
164 return num_dimensions;
167template <
int num_dimensions,
class coordT>
169BasicCoordinate<num_dimensions, coordT>::size()
171 return num_dimensions;
177template <
int num_dimensions,
class coordT>
178BasicCoordinate<num_dimensions, coordT>&
179BasicCoordinate<num_dimensions, coordT>::operator+=(
const BasicCoordinate<num_dimensions, coordT>& c)
181 for (
int i = 1; i <= num_dimensions; i++)
186template <
int num_dimensions,
class coordT>
187BasicCoordinate<num_dimensions, coordT>&
188BasicCoordinate<num_dimensions, coordT>::operator-=(
const BasicCoordinate<num_dimensions, coordT>& c)
190 for (
int i = 1; i <= num_dimensions; i++)
195template <
int num_dimensions,
class coordT>
196BasicCoordinate<num_dimensions, coordT>&
197BasicCoordinate<num_dimensions, coordT>::operator*=(
const BasicCoordinate<num_dimensions, coordT>& c)
199 for (
int i = 1; i <= num_dimensions; i++)
204template <
int num_dimensions,
class coordT>
205BasicCoordinate<num_dimensions, coordT>&
206BasicCoordinate<num_dimensions, coordT>::operator/=(
const BasicCoordinate<num_dimensions, coordT>& c)
208 for (
int i = 1; i <= num_dimensions; i++)
213template <
int num_dimensions,
class coordT>
214BasicCoordinate<num_dimensions, coordT>&
215BasicCoordinate<num_dimensions, coordT>::operator+=(
const coordT& a)
217 for (
int i = 1; i <= num_dimensions; i++)
222template <
int num_dimensions,
class coordT>
223BasicCoordinate<num_dimensions, coordT>&
224BasicCoordinate<num_dimensions, coordT>::operator-=(
const coordT& a)
226 for (
int i = 1; i <= num_dimensions; i++)
231template <
int num_dimensions,
class coordT>
232BasicCoordinate<num_dimensions, coordT>&
233BasicCoordinate<num_dimensions, coordT>::operator*=(
const coordT& a)
235 for (
int i = 1; i <= num_dimensions; i++)
240template <
int num_dimensions,
class coordT>
241BasicCoordinate<num_dimensions, coordT>&
242BasicCoordinate<num_dimensions, coordT>::operator/=(
const coordT& a)
244 for (
int i = 1; i <= num_dimensions; i++)
252template <
int num_dimensions,
class coordT>
253BasicCoordinate<num_dimensions, coordT>
254BasicCoordinate<num_dimensions, coordT>::operator+(
const BasicCoordinate<num_dimensions, coordT>& c)
const
256 BasicCoordinate<num_dimensions, coordT> tmp(*
this);
261template <
int num_dimensions,
class coordT>
262BasicCoordinate<num_dimensions, coordT>
263BasicCoordinate<num_dimensions, coordT>::operator-(
const BasicCoordinate<num_dimensions, coordT>& c)
const
265 BasicCoordinate<num_dimensions, coordT> tmp(*
this);
270template <
int num_dimensions,
class coordT>
271BasicCoordinate<num_dimensions, coordT>
272BasicCoordinate<num_dimensions, coordT>::operator*(
const BasicCoordinate<num_dimensions, coordT>& c)
const
274 BasicCoordinate<num_dimensions, coordT> tmp(*
this);
279template <
int num_dimensions,
class coordT>
280BasicCoordinate<num_dimensions, coordT>
281BasicCoordinate<num_dimensions, coordT>::operator/(
const BasicCoordinate<num_dimensions, coordT>& c)
const
283 BasicCoordinate<num_dimensions, coordT> tmp(*
this);
288template <
int num_dimensions,
class coordT>
289BasicCoordinate<num_dimensions, coordT>
290BasicCoordinate<num_dimensions, coordT>::operator+(
const coordT& a)
const
292 BasicCoordinate<num_dimensions, coordT> tmp(*
this);
297template <
int num_dimensions,
class coordT>
298BasicCoordinate<num_dimensions, coordT>
299BasicCoordinate<num_dimensions, coordT>::operator-(
const coordT& a)
const
301 BasicCoordinate<num_dimensions, coordT> tmp(*
this);
306template <
int num_dimensions,
class coordT>
307BasicCoordinate<num_dimensions, coordT>
308BasicCoordinate<num_dimensions, coordT>::operator*(
const coordT& a)
const
310 BasicCoordinate<num_dimensions, coordT> tmp(*
this);
315template <
int num_dimensions,
class coordT>
316BasicCoordinate<num_dimensions, coordT>
317BasicCoordinate<num_dimensions, coordT>::operator/(
const coordT& a)
const
319 BasicCoordinate<num_dimensions, coordT> tmp(*
this);
324template <
int num_dimensions,
class coordT>
325BasicCoordinate<num_dimensions, coordT>
326BasicCoordinate<num_dimensions, coordT>::operator-()
const
328 BasicCoordinate<num_dimensions, coordT> tmp(0);
339make_coordinate(
const T& a1)
341 BasicCoordinate<1, T> a;
348make_coordinate(
const T& a1,
const T& a2)
350 BasicCoordinate<2, T> a;
358make_coordinate(
const T& a1,
const T& a2,
const T& a3)
360 BasicCoordinate<3, T> a;
369make_coordinate(
const T& a1,
const T& a2,
const T& a3,
const T& a4)
371 BasicCoordinate<4, T> a;
381make_coordinate(
const T& a1,
const T& a2,
const T& a3,
const T& a4,
const T& a5)
383 BasicCoordinate<5, T> a;
394make_coordinate(
const T& a1,
const T& a2,
const T& a3,
const T& a4,
const T& a5,
const T& a6)
396 BasicCoordinate<6, T> a;
406template <
int num_dimensions,
class coordT>
410 return std::inner_product(p1.begin(), p1.end(), p2.begin(), coordT(0));
413template <
int num_dimensions,
class coordT>
418 return static_cast<double>(std::inner_product(p1.begin(), p1.end(), p1.begin(), coordT(0)));
424template <
int num_dimensions,
class coordT>
431template <
int num_dimensions,
class coordT>
438template <
int num_dimensions,
class coordT>
445template <
int num_dimensions,
class coordT>
446inline BasicCoordinate<num_dimensions + 1, coordT>
452 std::copy(c.begin(), c.end(), retval.begin() + 1);
456template <
int num_dimensions,
class coordT>
457BasicCoordinate<num_dimensions - 1, coordT>
461 std::copy(c.begin(), c.end() - 1, retval.begin());
464template <
int num_dimensions,
class coordT>
465inline BasicCoordinate<num_dimensions + 1, coordT>
470 retval[num_dimensions + 1] = a;
471 std::copy(c.begin(), c.end(), retval.begin());
475template <
int num_dimensions,
class coordT>
476BasicCoordinate<num_dimensions - 1, coordT>
481 std::copy(c.begin() + 1, c.end(), retval.begin());
484template <
int num_dimensions>
485inline BasicCoordinate<num_dimensions, float>
489 for (
int i = 1; i <= num_dimensions; ++i)
490 cfloat[i] = (
float)cint[i];
498template <
class coordT>
500coordinate_less_than_help(is_1d,
const BasicCoordinate<1, coordT>& c1,
const BasicCoordinate<1, coordT>& c2)
502 return c1[1] < c2[1];
506template <
class coordT>
508coordinate_less_than_help(is_not_1d,
const BasicCoordinate<2, coordT>& c1,
const BasicCoordinate<2, coordT>& c2)
510 return c1[1] < c2[1] || (c1[1] == c2[1] && c1[2] < c2[2]);
514template <
class coordT>
516coordinate_less_than_help(is_not_1d,
const BasicCoordinate<3, coordT>& c1,
const BasicCoordinate<3, coordT>& c2)
518 return c1[1] < c2[1] || (c1[1] == c2[1] && (c1[2] < c2[2] || (c1[2] == c2[2] && c1[3] < c2[3])));
521template <
int num_dimensions,
class coordT>
523coordinate_less_than_help(is_not_1d,
524 const BasicCoordinate<num_dimensions, coordT>& c1,
525 const BasicCoordinate<num_dimensions, coordT>& c2)
533template <
int num_dimensions,
class coordT>