本文整理汇总了C++中QBezier::parameterSplitLeft方法的典型用法代码示例。如果您正苦于以下问题:C++ QBezier::parameterSplitLeft方法的具体用法?C++ QBezier::parameterSplitLeft怎么用?C++ QBezier::parameterSplitLeft使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QBezier
的用法示例。
在下文中一共展示了QBezier::parameterSplitLeft方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: bezierOnInterval
QBezier QBezier::bezierOnInterval(qreal t0, qreal t1) const
{
if (t0 == 0 && t1 == 1)
return *this;
QBezier bezier = *this;
QBezier result;
bezier.parameterSplitLeft(t0, &result);
qreal trueT = (t1-t0)/(1-t0);
bezier.parameterSplitLeft(trueT, &result);
return result;
}
示例2: tAtLength
qreal QBezier::tAtLength(qreal l) const
{
qreal len = length();
qreal t = qreal(1.0);
const qreal error = qreal(0.01);
if (l > len || qFuzzyCompare(l, len))
return t;
t *= qreal(0.5);
//int iters = 0;
//qDebug()<<"LEN is "<<l<<len;
qreal lastBigger = qreal(1.0);
while (1) {
//qDebug()<<"\tt is "<<t;
QBezier right = *this;
QBezier left;
right.parameterSplitLeft(t, &left);
qreal lLen = left.length();
if (qAbs(lLen - l) < error)
break;
if (lLen < l) {
t += (lastBigger - t) * qreal(0.5);
} else {
lastBigger = t;
t -= t * qreal(0.5);
}
//++iters;
}
//qDebug()<<"number of iters is "<<iters;
return t;
}
示例3: getSubRange
QBezier QBezier::getSubRange(qreal t0, qreal t1) const
{
QBezier result;
QBezier temp;
// cut at t1
if (qFuzzyIsNull(t1 - qreal(1.))) {
result = *this;
} else {
temp = *this;
temp.parameterSplitLeft(t1, &result);
}
// cut at t0
if (!qFuzzyIsNull(t0))
result.parameterSplitLeft(t0 / t1, &temp);
return result;
}