#include ".\trilinearsdfinterp.h" TrilinearSdfInterp::TrilinearSdfInterp(void) { } TrilinearSdfInterp::~TrilinearSdfInterp(void) { } void TrilinearSdfInterp::setNode(octreeNode *node) { this->node = node; } double TrilinearSdfInterp::interpolate(const Point &pt) { Point normPt; double x, y, z; double dist; normPt = pt - *(((node->vtxArray)[0][0][0])->v); normPt /= node->m_edgeLength; x = (double) normPt[0]; y = (double) normPt[1]; z = (double) normPt[2]; dist = ( ((node->vtxArray)[0][0][0])->dist * (1 - x) * (1 - y) * (1 - z) + ((node->vtxArray)[1][0][0])->dist * x * (1 - y) * (1 - z) + ((node->vtxArray)[0][1][0])->dist * (1 - x) * y * (1 - z) + ((node->vtxArray)[0][0][1])->dist * (1 - x) * (1 - y) * z + ((node->vtxArray)[1][0][1])->dist * x * (1 - y) * z + ((node->vtxArray)[0][1][1])->dist * (1 - x) * y * z + ((node->vtxArray)[1][1][0])->dist * x * y * (1 - z) + ((node->vtxArray)[1][1][1])->dist * x * y * z ); return dist; }