2 #ifndef GEODESIC_ALGORITHM_EXACT_ELEMENTS_20071231 3 #define GEODESIC_ALGORITHM_EXACT_ELEMENTS_20071231 36 assert(x>=0.0 && x <= m_edge->length());
47 return m_d + std::abs(dx);
68 m_d + sqrt(b*b + m_pseudo_y*m_pseudo_y);
95 bool operator()(interval_pointer
const x, interval_pointer
const y)
const 99 return x->
min() < y->
min();
118 return sqrt(a*a + b*b);
157 double&
stop(){
return m_stop;};
181 assert(offset >= 0.0 && offset <= m_edge->length());
183 interval_pointer p = m_first;
184 while(p && p->
stop() < offset)
195 interval_pointer& interval)
197 interval_pointer p = m_first;
223 interval_pointer p = m_first;
235 interval_pointer p = m_first;
248 interval_pointer interval = covering_interval(x);
253 interval_pointer&
first(){
return m_first;};
256 interval_pointer m_first;
275 if(x->type() != y->type())
277 return x->type() < y->type();
281 return x->base_element()->id() < y->base_element()->id();
292 typedef std::vector<SurfacePointWithIndex*> sorted_vector_type;
299 m_search_dummy.base_element() = mesh_element;
301 return equal_range(m_sorted.begin(),
309 resize(sources.size());
310 m_sorted.resize(sources.size());
311 for(
unsigned i=0; i<sources.size(); ++i)
319 std::sort(m_sorted.begin(), m_sorted.end(), m_compare_less);
325 return *(begin() + i);
329 sorted_vector_type m_sorted;
352 if(std::abs(hs+hc) < local_epsilon)
362 d_out =
signal(end) + fabs(end - rs);
372 double ri = (rs*hc + hs*rc)/(hs+hc);
439 #endif //GEODESIC_ALGORITHM_EXACT_ELEMENTS_20071231
DirectionType m_direction
DirectionType & direction()
unsigned number_of_intervals()
void local_coordinates(Point3D *point, double &x, double &y)
bool operator()(SurfacePointWithIndex *x, SurfacePointWithIndex *y) const
std::pair< sorted_iterator, sorted_iterator > sorted_iterator_pair
bool visible_from_source()
interval_pointer & next()
void initialize(edge_pointer edge, SurfacePoint *point=NULL, unsigned source_index=0)
void initialize(SurfacePoint const &p)
sorted_vector_type::iterator sorted_iterator
void compute_min_distance(double stop)
interval_pointer covering_interval(double offset)
unsigned & source_index()
void find_closest_point(double const x, double const y, double &offset, double &distance)
void initialize(SurfacePoint &p, unsigned index)
IntervalList * list_pointer
void initialize(edge_pointer e)
Interval * interval_pointer
bool operator()(interval_pointer const x, interval_pointer const y) const
double const GEODESIC_INF
base_pointer & base_element()
double hypotenuse(double a, double b)
void initialize(std::vector< SurfacePoint > &sources)
sorted_iterator_pair sources(base_pointer mesh_element)
interval_pointer & first()
SurfacePointWithIndex & operator[](unsigned i)
double const SMALLEST_INTERVAL_RATIO
void find_closest_point(SurfacePoint *point, double &offset, double &distance, interval_pointer &interval)
double max_distance(double end)