void CFDE_Path::GetCurveTangents(const CFX_PointsF& points, CFX_PointsF& tangents, FX_BOOL bClosed, FX_FLOAT fTension) const { int32_t iCount = points.GetSize(); tangents.SetSize(iCount); if (iCount < 3) return; FX_FLOAT fCoefficient = fTension / 3.0f; const CFX_PointF* pPoints = points.GetData(); CFX_PointF* pTangents = tangents.GetData(); for (int32_t i = 0; i < iCount; ++i) { int32_t r = i + 1; int32_t s = i - 1; if (r >= iCount) r = bClosed ? (r - iCount) : (iCount - 1); if (s < 0) s = bClosed ? (s + iCount) : 0; pTangents[i].x += (fCoefficient * (pPoints[r].x - pPoints[s].x)); pTangents[i].y += (fCoefficient * (pPoints[r].y - pPoints[s].y)); } }