7 template<
typename Real>
34 template<
typename Real>
74 if (q > 1.0f)
return 0.0f;
77 const Real hh = h * h;
78 return 15.0f / ((
Real)
M_PI * hh * h) * d * d * d * scale;
85 if (q > 1.0f)
return 0.0;
89 const Real hh = h * h;
90 return -45.0f / ((
Real)
M_PI * hh*hh) *d*d * scale;
97 if (q > 1.0f)
return 0.0f;
99 const Real qq = q * q;
100 const Real hh = h * h;
101 return -15.0f / ((
Real)
M_PI * hh) * (q -
Real(1.5) * qq + q * qq -
Real(0.25) * qq * qq -
Real(0.25)) * scale;
106 template<
typename Real>
125 return Real(1) * scale;
130 return Real(0) * scale;
135 return Real(0) * scale;
141 template<
typename Real>
173 const Real q = r / h;
174 if (q > 1.0f)
return 0.0f;
176 return scale * (1.0f - q * q);
182 const Real q = r / h;
185 const Real hh = h * h;
187 const Real alpha = 1.0f;
188 return -alpha * dd* scale;
195 const Real q = r / h;
198 const Real hh = h * h;
199 return 1.0 / (hh * h) * (
Real(2) / 3 - q + q * q /
Real(3));
206 template<
typename Real>
230 const Real q = r / h;
232 return q*q*q*kernSmooth.
Weight(r, h) * scale;
237 const Real q = r / h;
239 return q*q*kernSmooth.
Weight(r, h)/h * scale;
244 const Real q = r / h;
246 return q*kernSmooth.
Weight(r, h) / (h*h) * scale;
251 template<
typename Real>
273 const Real q = 2.0f*r / h;
275 const Real alpha = 3.0f / (2.0f * (
Real)
M_PI * hh * h) * scale;
277 if (q > 2.0f)
return 0.0f;
281 const Real d = 2.0f - q;
282 return alpha / 6.0f*d*d*d;
288 const Real qqq = qq*q;
289 return alpha*(2.0f / 3.0f - qq + 0.5f*qqq);
296 const Real q = 2.0f*r / h;
298 const Real alpha = 3.0f / (2.0f * (
Real)
M_PI * hh * h) * scale;
300 if (q > 2.0f)
return Real(0);
304 const Real d = 2.0f - q;
305 return -0.5f*alpha*d*d;
311 return alpha*(-2.0f*q + 1.5f*qq);
317 template<
typename Real>
338 const Real q = 2.5f*r / h;
339 if (q > 2.5)
return 0.0f;
342 const Real d = 2.5f - q;
344 return 0.0255f*dd*dd / hh * scale;
348 const Real d = 2.5f - q;
349 const Real t = 1.5f - q;
352 return 0.0255f*(dd*dd - 5.0f*
tt*
tt) / hh * scale;
356 const Real d = 2.5f - q;
357 const Real t = 1.5f - q;
358 const Real w = 0.5f - q;
362 return 0.0255f*(dd*dd - 5.0f*
tt*
tt + 10.0f*ww*ww) / hh * scale;
369 const Real q = 2.5f*r / h;
370 if (q > 2.5)
return 0.0f;
374 const Real d = 2.5f - q;
375 return -0.102f*d*d*d / hh * scale;
379 const Real d = 2.5f - q;
380 const Real t = 1.5f - q;
381 return -0.102f*(d*d*d - 5.0f*t*t*t) / hh * scale;
385 const Real d = 2.5f - q;
386 const Real t = 1.5f - q;
387 const Real w = 0.5f - q;
388 return -0.102f*(d*d*d - 5.0f*t*t*t + 10.0f*w*w*w) / hh * scale;
393 template<
typename Real>
412 const float q = r / h;
413 if (q > 1.0f)
return 0.0f;
415 const float d = 1.0f - q;
416 const float hh = h * h;
417 return (1.0 - glm::pow(q, 4.0f)) * scale;
424 const float q = r / h;
427 return scale * w / (0.4f * h);
429 return scale * w / r;
435 const float q = r / h;
438 return scale * w / (0.16f * h * h);
440 return scale * w / r / r;
445 template<
typename Real>
465 const float q = r / h;
466 if (q > 1.0f)
return 0.0f;
469 return alpha * glm::pow(p, 4.0) * (1 + 4 * q) * scale;
476 const float q = r / h;
477 if (q > 1.0f)
return 0.0f;
480 Real p3 = glm::pow(p, 3.0);
481 return scale * 4 * alpha * (p * p3 - p3 * (1 + 4 * q));
489 template<
typename Real>
513 const Real q = r / h;
514 if (q > 1.0f)
return 0.0f;
518 return (1.0 - glm::pow(q, 4.0f));
525 const float q = r / h;
528 return w / (0.4f * h);
536 const float q = r / h;
539 return w / (0.16f * h * h);
DYN_FUNC ~ConstantKernel()
DYN_FUNC ConstantKernel()
DYN_FUNC Real Weight(const Real r, const Real h) override
DYN_FUNC Real Gradient(const Real r, const Real h) override
static DYN_FUNC Real weight(const Real r, const Real h, Real scale)
static DYN_FUNC Real gradient(const Real r, const Real h, Real scale)
static DYN_FUNC Real weightRR(const Real r, const Real h, Real scale)
static DYN_FUNC Real weight(const Real r, const Real h, Real scale)
static DYN_FUNC Real gradient(const Real r, const Real h, Real scale)
DYN_FUNC Real Weight(const Real r, const Real h) override
DYN_FUNC ~CorrectedKernel()
DYN_FUNC Real Gradient(const Real r, const Real h) override
DYN_FUNC CorrectedKernel()
static DYN_FUNC Real weightRR(const Real r, const Real h, Real scale)
DYN_FUNC Real WeightRR(const Real r, const Real h)
static DYN_FUNC Real weightRR(const Real r, const Real h, Real scale)
DYN_FUNC Real Gradient(const Real r, const Real h) override
static DYN_FUNC Real gradient(const Real r, const Real h, Real scale)
static DYN_FUNC Real weight(const Real r, const Real h, Real scale)
DYN_FUNC CorrectedMPSKernel()
DYN_FUNC ~CorrectedMPSKernel()
DYN_FUNC Real Weight(const Real r, const Real h) override
DYN_FUNC Real WeightRR(const Real r, const Real h)
DYN_FUNC Real Gradient(const Real r, const Real h) override
DYN_FUNC CorrectedQuaticKernel()
static DYN_FUNC Real weight(const Real r, const Real h, Real scale)
static DYN_FUNC Real weightRR(const float r, const float h, Real scale)
DYN_FUNC ~CorrectedQuaticKernel()
DYN_FUNC Real Weight(const Real r, const Real h) override
static DYN_FUNC Real gradient(const float r, const float h, Real scale)
DYN_FUNC Real Gradient(const Real r, const Real h) override
static DYN_FUNC Real weight(const Real r, const Real h, Real scale)
DYN_FUNC Real Weight(const Real r, const Real h) override
static DYN_FUNC Real gradient(const Real r, const Real h, Real scale)
virtual DYN_FUNC Real integral(const Real r, const Real h)
virtual DYN_FUNC Real Gradient(const Real r, const Real h)
virtual DYN_FUNC Real Weight(const Real r, const Real h)
DYN_FUNC Real Gradient(const Real r, const Real h) override
static DYN_FUNC Real weight(const Real r, const Real h, Real scale)
static DYN_FUNC Real gradient(const Real r, const Real h, Real scale)
DYN_FUNC ~QuarticKernel()
DYN_FUNC Real Weight(const Real r, const Real h) override
static DYN_FUNC Real gradient(const Real r, const Real h, const Real scale)
static DYN_FUNC Real weight(const Real r, const Real h, const Real scale)
DYN_FUNC Real Weight(const Real r, const Real h) override
static DYN_FUNC Real integral(const Real r, const Real h, Real scale)
DYN_FUNC Real Gradient(const Real r, const Real h) override
static DYN_FUNC Real weight(const Real r, const Real h, Real scale)
static DYN_FUNC Real integral(const Real r, const Real h, Real scale)
DYN_FUNC Real integral(const Real r, const Real h) override
DYN_FUNC Real Gradient(const Real r, const Real h) override
static DYN_FUNC Real gradient(const Real r, const Real h, Real scale)
DYN_FUNC Real Weight(const Real r, const Real h) override
static DYN_FUNC Real weight(const Real r, const Real h, Real scale)
DYN_FUNC Real Gradient(const Real r, const Real h) override
DYN_FUNC ~WendlandC2Kernel()
DYN_FUNC WendlandC2Kernel()
static DYN_FUNC Real gradient(const float r, const float h, Real scale)
DYN_FUNC Real Weight(const Real r, const Real h) override
This is an implementation of AdditiveCCD based on peridyno.