cpp
deque<QPointF> mapToolCurve::getBezier(deque<QPointF>& cps)
{
deque<QPointF> _resp;
for (double t = 0.0; t < 1.0; t += 0.01)
{
auto pointf = getBezierLoop(cps, t);
_resp.emplace_back(pointf);
}
return _resp;
}
QPointF mapToolCurve::getBezierLoop(deque<QPointF>& cps,double t)
{
QPointF outPoint;
deque<QPointF> newCps;
for (size_t i = 0; i < cps.size() - 1; i++)
{
auto p = cps[i] + (cps[i + 1] - cps[i]) * t;
newCps.emplace_back(p);
}
if (1 == newCps.size())
{
return newCps[0];
}else
{
outPoint = getBezierLoop(newCps,t);
}
return outPoint;
}