11#ifndef __POINTCLOUDIPOL_HPP
12#define __POINTCLOUDIPOL_HPP
14#include "memcore/RefPtr.hpp"
15#include <aerie/KDTree.hpp>
16#include "fiber/field/MemArray.hpp"
18#include "gridopDllApi.h"
29 enum QueryType{ EULER_RADIUS, EULER_NEIGHBORS, MAX_RADIUS, MAX_NEIGHBORS };
30 enum InterpolationType{ NEAREST, LINEAR, SQUARE, GAUSSIAN, MEDIAN, AVERAGE, SSQUARE,
31 SPHCUBIC, SPHQUARTIC, SPHQUINTIC};
36extern gridop_API
double sph_cubic(
double x );
41extern gridop_API
double sph_quartic(
double x );
47extern gridop_API
double sph_quintic(
double x );
73 m_tree->getEuclideanRange( pos, m_r,
map );
97 m_tree->getManhattenRange( pos, m_r,
map );
108template<
class FieldType,
int InterPolType>
117 assert(0 &&
"PointCloudInterpolator Default Trait Called, should never happen");
123template<
class FieldType>
145 return values[ (*
map.
begin()).second ];
149 if((*iter).first == 0.0)
153 res = ( values[(*iter).second] * ( m_r -
sqrt( (*iter).first) ) );
157 res += ( values[(*iter).second] * ( m_r -
sqrt( (*iter).first) ) );
159 sum += ( m_r -
sqrt( (*iter).first ) );
193 Eagle::PhysicalSpace::tvector res;
204 return values[ (*
map.
begin()).second ];
208 if((*iter).first == 0.0)
213 res = ( values[(*iter).second] * ( m_r -
sqrt( (*iter).first) ) );
219 res += ( -values[(*iter).second] * ( m_r -
sqrt( (*iter).first) ) );
221 res += ( values[(*iter).second] * ( m_r -
sqrt( (*iter).first) ) );
223 sum += ( m_r -
sqrt( (*iter).first ) );
257 Eagle::PhysicalSpace::tvector res;
268 return values[ (*
map.
begin()).second ];
272 if((*iter).first == 0.0)
275 double w = 1 -
sqrt( (*iter).first ) / m_r *
sqrt( (*iter).first) / m_r;
279 res = values[(*iter).second] *
w;
285 res += -values[(*iter).second] *
w;
287 res += values[(*iter).second] *
w ;
320 Eagle::PhysicalSpace::tvector res;
330 return values[ (*
map.
begin()).second ];
334 if((*iter).first == 0.0)
339 res = values[(*iter).second];
345 res += -values[(*iter).second];
347 res += values[(*iter).second];
381 Eagle::PhysicalSpace::tvector res;
392 return values[ (*
map.
begin()).second ];
396 if((*iter).first == 0.0)
400 double w = sph_cubic(
sqrt( (*iter).first ) / m_r * 2 );
404 res = values[(*iter).second] *
w;
410 res += -values[(*iter).second] *
w;
412 res += values[(*iter).second] *
w;
448 Eagle::PhysicalSpace::tvector res;
459 return values[ (*
map.
begin()).second ];
463 if((*iter).first == 0.0)
467 double w = sph_quartic(
sqrt( (*iter).first ) / m_r * 2.5 );
471 res = values[(*iter).second] *
w;
477 res += -values[(*iter).second] *
w;
479 res += values[(*iter).second] *
w;
515 Eagle::PhysicalSpace::tvector res;
526 return values[ (*
map.
begin()).second ];
530 if((*iter).first == 0.0)
534 double w = sph_quintic(
sqrt( (*iter).first ) / m_r * 3.0 );
538 res = values[(*iter).second] *
w;
544 res += -values[(*iter).second] *
w;
546 res += values[(*iter).second] *
w;
569template<
class FieldType>
585 return values[ (*
map.
begin()).second ];
595 res = values[(*iter).second];
598 res = values[(*iter).second];
600 res += values[(*iter).second];
614template<
class FieldType>
633 return values[ (*
map.
begin()).second ];
638 if((*iter).first == 0.0)
641 res += values[(*iter).second]*
pow( 2.718281828459045235,-(
pow(
fabs((*iter).first) ,2) ) / m_r );
642 sum +=
pow( 2.718281828459045235,-(
pow(
fabs((*iter).first) ,2) ) / m_r );
660template<
class FieldType,
class QueryType,
class Po
intInterpolator>
681 m_ipol.setData( data );
684 size_t getQuerySize()
698 myTree =
new Eagle::KDTree <3, size_t>();
706 for (
size_t i = 0; i < m_data->Size()[0]; i++)
722 m_query.setTree(
myTree );
725 m_query.query(
map, pos );
729 return m_ipol.doIt(
map );
complex< _Tp > pow(const _Tp &, const complex< _Tp > &)
complex< _Tp > sqrt(const complex< _Tp > &)
constexpr iterator_traits< _InputIterator >::difference_type count(_InputIterator __first, _InputIterator __last, const _Tp &__value)
_Tp fabs(const std::complex< _Tp > &__z)
constexpr void advance(_InputIterator &__i, _Distance __n)
const_iterator end() const noexcept
size_type size() const noexcept
const_iterator begin() const noexcept
An iterator with an optional DataCreator, which is just a class to intercept creation of data along a...
Definition CreativeIterator.hpp:34
Definition PointCloudIpol.hpp:110
Definition PointCloudIpol.hpp:662
Definition PointCloudIpol.hpp:53
vector dot(const bivector &a, const vector &b)
Given a fragmented field of curvilinear coordinates, (3D array of coordinates), build a uniform Grid ...
Definition FAQ.dox:2