You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
966 B
53 lines
966 B
#include "UBInterpolator.h"
|
|
|
|
UBInterpolator::UBInterpolator()
|
|
{
|
|
}
|
|
|
|
UBInterpolator::~UBInterpolator()
|
|
{
|
|
}
|
|
|
|
UBQuadraticBezier::UBQuadraticBezier()
|
|
{
|
|
mPath = 0;
|
|
}
|
|
|
|
UBQuadraticBezier::~UBQuadraticBezier()
|
|
{
|
|
if (mPath)
|
|
delete mPath;
|
|
}
|
|
|
|
void UBQuadraticBezier::setPoints(QList<QPointF> points)
|
|
{
|
|
setPoints(points[0], points[1], points[2]);
|
|
|
|
}
|
|
|
|
void UBQuadraticBezier::setPoints(QPointF start, QPointF control, QPointF end)
|
|
{
|
|
mPath = new QPainterPath(start);
|
|
mPath->quadTo(control, end);
|
|
}
|
|
|
|
/**
|
|
* @brief Return n points along the curve, including start and end points (thus n should be larger than or equal to 2).
|
|
*
|
|
* The higher n, the more accurate the result
|
|
*/
|
|
QList<QPointF> UBQuadraticBezier::getPoints(int n)
|
|
{
|
|
QList<QPointF> points;
|
|
|
|
if (n <= 1)
|
|
return points;
|
|
|
|
for (int i(0); i <= n; ++i) {
|
|
qreal percent = qreal(i)/qreal(n);
|
|
|
|
points << mPath->pointAtPercent(percent);
|
|
}
|
|
|
|
return points;
|
|
}
|
|
|