本文整理汇总了C++中Matrix2d::ldlt方法的典型用法代码示例。如果您正苦于以下问题:C++ Matrix2d::ldlt方法的具体用法?C++ Matrix2d::ldlt怎么用?C++ Matrix2d::ldlt使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Matrix2d
的用法示例。
在下文中一共展示了Matrix2d::ldlt方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: if
Vector2d
FittingCylinder::inverseMapping (const ON_NurbsSurface &nurbs, const Vector3d &pt, const Vector2d &hint, double &error,
Vector3d &p, Vector3d &tu, Vector3d &tv, int maxSteps, double accuracy, bool quiet)
{
double pointAndTangents[9];
Vector2d current, delta;
Matrix2d A;
Vector2d b;
Vector3d r;
std::vector<double> elementsU = getElementVector (nurbs, 0);
std::vector<double> elementsV = getElementVector (nurbs, 1);
double minU = elementsU[0];
double minV = elementsV[0];
double maxU = elementsU[elementsU.size () - 1];
double maxV = elementsV[elementsV.size () - 1];
current = hint;
for (int k = 0; k < maxSteps; k++)
{
nurbs.Evaluate (current (0), current (1), 1, 3, pointAndTangents);
p (0) = pointAndTangents[0];
p (1) = pointAndTangents[1];
p (2) = pointAndTangents[2];
tu (0) = pointAndTangents[3];
tu (1) = pointAndTangents[4];
tu (2) = pointAndTangents[5];
tv (0) = pointAndTangents[6];
tv (1) = pointAndTangents[7];
tv (2) = pointAndTangents[8];
r = p - pt;
b (0) = -r.dot (tu);
b (1) = -r.dot (tv);
A (0, 0) = tu.dot (tu);
A (0, 1) = tu.dot (tv);
A (1, 0) = A (0, 1);
A (1, 1) = tv.dot (tv);
delta = A.ldlt ().solve (b);
if (delta.norm () < accuracy)
{
error = r.norm ();
return current;
}
else
{
current = current + delta;
if (current (0) < minU)
current (0) = minU;
else if (current (0) > maxU)
current (0) = maxU;
if (current (1) < minV)
current (1) = maxV - (minV - current (1));
else if (current (1) > maxV)
current (1) = minV + (current (1) - maxV);
}
}
error = r.norm ();
if (!quiet)
{
printf ("[FittingCylinder::inverseMapping] Warning: Method did not converge (%e %d)\n", accuracy, maxSteps);
printf (" %f %f ... %f %f\n", hint (0), hint (1), current (0), current (1));
}
return current;
}