39 PONCA_MULTIARCH_STD_MATH(sqrt);
40 PONCA_MULTIARCH_STD_MATH(max);
41 PONCA_MULTIARCH_STD_MATH(abs);
44 if(Base::finalize() !=
STABLE)
45 return Base::m_eCurrentState;
46 if(Base::getNumNeighbors() < DataPoint::Dim)
48 if (Base::algebraicSphere().isValid())
51 Base::m_eCurrentState = Base::getNumNeighbors() < 2*DataPoint::Dim ?
UNSTABLE :
STABLE;
54 Scalar epsilon = Eigen::NumTraits<Scalar>::dummy_precision();
58 m_nume = (m_sumDotPN - invSumW * Base::m_sumP.dot(Base::m_sumN));
59 Scalar den1 = invSumW * Base::m_sumP.dot(Base::m_sumP);
60 m_deno = m_sumDotPP - den1;
63 if(abs(m_deno) < epsilon * max(m_sumDotPP, den1))
67 Base::m_ul = s*Base::m_ul;
68 Base::m_uc = s*Base::m_uc;
74 Base::m_uq =
Scalar(.5) * m_nume / m_deno;
75 Base::m_ul = (Base::m_sumN - Base::m_sumP * (
Scalar(2.) * Base::m_uq)) * invSumW;
76 Base::m_uc = -invSumW * (Base::m_ul.dot(Base::m_sumP) + m_sumDotPP * Base::m_uq);
79 Base::m_isNormalized =
false;
81 return Base::m_eCurrentState;
125 PONCA_MULTIARCH_STD_MATH(sqrt);
133 Scalar nume = Base::m_sumDotPN - invSumW*Base::m_sumP.dot(Base::m_sumN);
134 Scalar deno = Base::m_sumDotPP - invSumW*Base::m_sumP.dot(Base::m_sumP);
139 m_dNume = m_dSumDotPN
140 - invSumW*invSumW * ( Base::getWeightSum() * ( Base::m_sumN.transpose() * Base::m_dSumP + Base::m_sumP.transpose() * m_dSumN )
141 - Base::m_dSumW*Base::m_sumP.dot(Base::m_sumN) );
143 m_dDeno = m_dSumDotPP
144 - invSumW*invSumW*(
Scalar(2.) * Base::getWeightSum() * Base::m_sumP.transpose() * Base::m_dSumP
145 - Base::m_dSumW*Base::m_sumP.dot(Base::m_sumP) );
147 m_dUq =
Scalar(.5) * (deno * m_dNume - m_dDeno * nume)/(deno*deno);
151 m_dUl = invSumW * ( m_dSumN - Base::m_ul*Base::m_dSumW -
Scalar(2.)*(Base::m_dSumP * Base::m_uq + Base::m_sumP * m_dUq) );
152 m_dUc = -invSumW*( Base::m_sumP.transpose() * m_dUl
153 + Base::m_sumDotPP * m_dUq
154 + Base::m_ul.transpose() * Base::m_dSumP
155 + Base::m_uq * m_dSumDotPP
156 + Base::m_dSumW * Base::m_uc);
159 return Base::m_eCurrentState;
163typename OrientedSphereDerImpl <DataPoint, _WFunctor, DiffType, T>::VectorArray
178typename OrientedSphereDerImpl <DataPoint, _WFunctor, DiffType, T>::ScalarArray