27 #ifndef WFMATH_POINT_FUNCS_H
28 #define WFMATH_POINT_FUNCS_H
30 #include <wfmath/point.h>
32 #include <wfmath/vector.h>
33 #include <wfmath/zero.h>
42 for(
int i = 0; i < dim; ++i) {
43 m_elem[i] = v.elements()[i];
58 for(
int i = 0; i < dim; ++i) {
71 if (!p.m_valid || !m_valid) {
75 CoordType delta = _ScaleEpsilon(m_elem, p.m_elem, dim, epsilon);
76 for(
int i = 0; i < dim; ++i) {
77 if(std::fabs(m_elem[i] - p.m_elem[i]) > delta) {
90 for(
int i = 0; i < dim; ++i) {
91 out.m_elem[i] = c1.m_elem[i] - c2.m_elem[i];
94 out.m_valid = c1.m_valid && c2.m_valid;
102 for(
int i = 0; i < dim; ++i) {
103 p.m_elem[i] += rhs.m_elem[i];
106 p.m_valid = p.m_valid && rhs.m_valid;
114 for(
int i = 0; i < dim; ++i) {
115 p.m_elem[i] -= rhs.m_elem[i];
118 p.m_valid = p.m_valid && rhs.m_valid;
128 for(
int i = 0; i < dim; ++i) {
129 CoordType diff = p1.m_elem[i] - p2.m_elem[i];
133 return (std::fabs(ans) >= _ScaleEpsilon(p1.m_elem, p2.m_elem, dim)) ? ans : 0;
136 template<
int dim,
template<
class,
class>
class container,
137 template<
class,
class>
class container2>
139 const container2<
CoordType, std::allocator<CoordType> >& weights)
143 typename container<Point<dim>, std::allocator<Point<dim> > >::const_iterator c_i = c.begin(), c_end = c.end();
144 typename container2<CoordType, std::allocator<CoordType> >::const_iterator w_i = weights.begin(),
145 w_end = weights.end();
149 if (c_i == c_end || w_i == w_end) {
153 bool valid = c_i->isValid();
155 CoordType tot_weight = *w_i, max_weight = std::fabs(*w_i);
156 for(
int j = 0; j < dim; ++j) {
157 out[j] = (*c_i)[j] * *w_i;
160 while(++c_i != c_end && ++w_i != w_end) {
167 for(
int j = 0; j < dim; ++j)
168 out[j] += (*c_i)[j] * *w_i;
176 for(
int j = 0; j < dim; ++j) {
177 out[j] /= tot_weight;
185 template<
int dim,
template<
class,
class>
class container>
190 typename container<Point<dim>, std::allocator<Point<dim> > >::const_iterator i = c.begin(), end = c.end();
199 bool valid = i->isValid();
205 for(
int j = 0; j < dim; ++j)
209 for(
int j = 0; j < dim; ++j) {
210 out[j] /= num_points;
224 for(
int i = 0; i < dim; ++i) {
225 out.m_elem[i] = p1.m_elem[i] * conj_dist + p2.m_elem[i] * dist;
228 out.m_valid = p1.m_valid && p2.m_valid;
243 CoordType& phi)
const;
247 #endif // WFMATH_POINT_FUNCS_H