37 #include <DGtal/base/BasicFunctors.h>
38 #include "DGtal/io/Color.h"
40 template<Dimension dim,
typename Container>
45 for (
typename Container::const_iterator it=dimensions.begin();
46 it!=dimensions.end(); ++it )
54 template<Dimension dim,
typename Container>
58 std::bitset<dim> t1; t1.set();
59 for (
typename Container::const_iterator it=dimensions.begin();
60 it!=dimensions.end(); ++it )
68 template<Dimension dim,
typename TComponent>
76 template<Dimension dim,
typename TComponent>
77 template<
typename Functor>
84 myArray[ i ] = f.operator() (apoint1[i], apoint2[i]);
87 template<Dimension dim,
typename TComponent>
92 template<Dimension dim,
typename TComponent>
98 myArray[ i ] = ptrValues[ i ];
101 template<Dimension dim,
typename TComponent>
112 template<Dimension dim,
typename TComponent>
126 template<Dimension dim,
typename TComponent>
142 #ifdef CPP11_INITIALIZER_LIST
143 template<Dimension dim,
typename TComponent>
148 for (
const Component *p = init.begin (); p != init.end () && i < dim; ++p, ++i)
150 for ( ; i < dim; ++i)
153 #endif // CPP11_INITIALIZER_LIST
155 template<Dimension dim,
typename TComponent>
158 : myArray( other.myArray )
161 template<Dimension dim,
typename TComponent>
162 template<
typename OtherComponent>
166 for (
Dimension i = 0; i < dimension; ++i )
167 this->myArray[ i ] = (
int)(
static_cast<OtherComponent
>(other[ i ]));
170 template<Dimension dim,
typename TComponent>
175 return myArray.
begin();
178 template<Dimension dim,
typename TComponent>
183 return myArray.
end();
186 template<Dimension dim,
typename TComponent>
191 return myArray.
begin();
194 template<Dimension dim,
typename TComponent>
199 return myArray.
end();
202 template<Dimension dim,
typename TComponent>
210 template<Dimension dim,
typename TComponent>
215 return myArray.
rend();
218 template<Dimension dim,
typename TComponent>
226 template<Dimension dim,
typename TComponent>
231 return myArray.
rend();
234 template<Dimension dim,
typename TComponent>
242 template<Dimension dim,
typename TComponent>
248 return myArray.at( i );
251 template<Dimension dim,
typename TComponent>
257 return myArray.at( i );
260 template<Dimension dim,
typename TComponent>
269 template<Dimension dim,
typename TComponent>
278 template<Dimension dim,
typename TComponent>
282 for (
Dimension i = 0; i < myArray.size(); ++i )
283 myArray[ i ] *= coeff;
287 template<Dimension dim,
typename TComponent>
296 template<Dimension dim,
typename TComponent>
305 template<Dimension dim,
typename TComponent>
306 template<
typename Component2>
311 for (
Dimension i = 0; i < dimension; ++i )
313 this->myArray[ i ] =
static_cast<Component>(v[ i ]);
318 #ifdef CPP11_INITIALIZER_LIST
319 template<Dimension dim,
typename TComponent>
324 std::initializer_list<Dimension> dimensions )
326 std::vector<Dimension> dims;
327 dims.reserve(dimensions.size());
328 for (
const Dimension *c = dimensions.begin (); c != dimensions.end (); ++c)
330 return partialCopy(pv, dims);
333 template<Dimension dim,
typename TComponent>
338 std::initializer_list<Dimension> dimensions )
340 std::vector<Dimension> dims;
341 dims.reserve(dimensions.size());
342 for (
const Dimension *c = dimensions.begin (); c != dimensions.end (); ++c)
344 return partialCopyInv(pv, dims);
348 template<Dimension dim,
typename TComponent>
353 const std::vector<Dimension> &dimensions)
355 std::bitset<dim> dims = ::setDimensionsIn<dim>(dimensions);
358 if ( dims.test(i) ) myArray[i] = pv.
myArray[i];
363 template<Dimension dim,
typename TComponent>
368 const std::vector<Dimension> &dimensions)
370 std::bitset<dim> dims = ::setDimensionsIn<dim>(dimensions);
373 if ( !dims.test(i) ) myArray[i] = pv.
myArray[i];
378 template<Dimension dim,
typename TComponent>
383 const std::vector<Dimension> &dimensions )
const
385 std::bitset<dim> dims = setDimensionsIn<dim>(dimensions);
388 if ( dims.test(i) && myArray[i] != pv.
myArray[i])
return false;
393 template<Dimension dim,
typename TComponent>
398 const std::vector<Dimension> &dimensions )
const
400 std::bitset<dim> dims = setDimensionsIn<dim>(dimensions);
403 if ( !dims.test(i) && myArray[i] != pv.
myArray[i])
return false;
408 template<Dimension dim,
typename TComponent>
413 return (myArray == pv.
myArray);
416 template<Dimension dim,
typename TComponent>
421 return (myArray != pv.
myArray);
424 template<Dimension dim,
typename TComponent>
432 template<Dimension dim,
typename TComponent>
437 return (myArray <= pv.
myArray);
440 template<Dimension dim,
typename TComponent>
448 template<Dimension dim,
typename TComponent>
453 return (myArray >= pv.
myArray);
456 template<Dimension dim,
typename TComponent>
462 this->myArray[ i ] += v[ i ];
466 template<Dimension dim,
typename TComponent>
471 return Self(*
this, v, std::plus<Component>());
474 template<Dimension dim,
typename TComponent>
480 this->myArray[ i ] -= v[ i ];
484 template<Dimension dim,
typename TComponent>
490 this->myArray[ i ] /= v[ i ];
494 template<Dimension dim,
typename TComponent>
499 return Self(*
this, v, std::divides<Component>());
502 template<Dimension dim,
typename TComponent>
507 for (
Dimension i = 0; i < dimension; ++i )
508 this->myArray[ i ] /= coeff;
512 template<Dimension dim,
typename TComponent>
518 for (
Dimension i = 0; i < dimension; ++i )
519 p[i] = this->myArray[ i ] / coeff;
523 template<Dimension dim,
typename TComponent>
530 dotprod += this->myArray[ i ]*v[ i ];
534 template<Dimension dim,
typename TComponent>
542 template<Dimension dim,
typename TComponent>
547 for (
Dimension i = 0; i < myArray.size(); ++i )
551 template<Dimension dim,
typename TComponent>
559 template<Dimension dim,
typename TComponent>
567 template<Dimension dim,
typename TComponent>
572 for (
Dimension i = 0; i < myArray.size(); ++i )
573 if ( p[ i ] < myArray[ i ] )
578 template<Dimension dim,
typename TComponent>
583 for (
Dimension i = 0; i < myArray.size(); ++i )
584 if ( p[ i ] > myArray[ i ] )
589 template<Dimension dim,
typename TComponent>
594 return *std::max_element(this->begin(), this->end());
597 template<Dimension dim,
typename TComponent>
602 return *std::min_element(this->begin(), this->end());
605 template<Dimension dim,
typename TComponent>
610 return std::max_element(this->begin(), this->end());
613 template<Dimension dim,
typename TComponent>
618 return std::min_element(this->begin(), this->end());
621 template<Dimension dim,
typename TComponent>
627 for (
Dimension i = 0; i < dimension; ++i )
628 this->myArray[ i ] = - this->myArray[ i ];
631 template<Dimension dim,
typename TComponent>
644 for (
Dimension i = 0; i < dimension; i++ )
647 tmp = ( double ) sqrt ( tmp );
650 for (
Dimension i = 0; i < dimension; i++ )
655 for (
Dimension i = 1; i < dimension; i++ )
663 template<Dimension dim,
typename TComponent>
668 ASSERT ( dimension > 0 );
671 for (
Dimension i = 1; i < dimension; ++i )
672 val += ( myArray[ i ] >= 0 )
678 template<Dimension dim,
typename TComponent>
683 ASSERT ( dimension > 0 );
686 for (
Dimension i = 1; i < dimension; ++i )
688 tmp = ( myArray[ i ] >= 0 ) ? myArray[ i ] : -myArray[ i ] ;
696 template<Dimension dim,
typename TComponent>
702 normalized /= normalized.
norm();
706 template<Dimension dim,
typename TComponent>
717 template<Dimension dim,
typename TComponent>
727 template<Dimension dim,
typename TComponent>
732 out <<
"[PointVector] {";
733 for (
Dimension i = 0; i < dimension ; ++i)
734 out << at( i ) << (i == dimension - 1 ?
"" :
", ");
739 template<Dimension dim,
typename TComponent>
744 return "PointVector";
748 template<Dimension dim,
typename TComponent>
754 object.selfDisplay( out );
758 template<Dimension dim,
typename TComponent>