// octreeEdge.cpp: implementation of the octreeEdge class. // ////////////////////////////////////////////////////////////////////// #include "octreeEdge.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// octreeEdge::octreeEdge(){ } octreeEdge::octreeEdge(Point& p1, Point& p2){ m_pointStart = p1; m_pointEnd = p2; } octreeEdge::~octreeEdge() { } float octreeEdge::evaluateEdge(float t){ return m_a*t*t + m_b*t + m_c; } float octreeEdge::evaluateD(float t){ return (float)(2.0*m_a*t + m_b); } void octreeEdge::computeABCFromSamples(const float d1, const float d2, const float d3){ m_a = 2*d1- 4*d2 + 2*d3; m_b = -3*d1+ 4*d2 - d3; m_c = d1; } void octreeEdge::decompose(bool front, octreeEdge& longEdge, octreeEdge& shortEdge){ if(front== true){ float a = longEdge.getA(); float newA = longEdge.getA()/4.0; float newB = longEdge.getB()/2.0; float newC = longEdge.getC(); shortEdge.setABC(newA, newB, newC); } else{ float newA = longEdge.getA()/4.0; float newB = -longEdge.getA()/2.0 + longEdge.getB()/2.0; float newC = longEdge.getA()*longEdge.getA()/4.0 - longEdge.getB()/2.0 + longEdge.getC(); shortEdge.setABC(newA, newB, newC); } } void octreeEdge::decompose(bool front, float d1, float d2, float d3, float& aS, float& bS, float& cS){ float aL,bL,cL; aL = 2*d1- 4*d2 + 2*d3; bL = -3*d1+ 4*d2 - d3; cL = d1; if(front == true){ aS = aL/4.0; bS = bL/2.0; cS = cL; } else{ aS = aL/4.0; bS = aL/2.0+ bL/2.0; cS = aL/4.0 + bL/2.0 + cL; } }