Lines Matching refs:SkScalar

28 static int is_not_monotonic(SkScalar a, SkScalar b, SkScalar c) {
29 SkScalar ab = a - b;
30 SkScalar bc = b - c;
39 static int valid_unit_divide(SkScalar numer, SkScalar denom, SkScalar* ratio) {
51 SkScalar r = numer / denom;
78 int SkFindUnitQuadRoots(SkScalar A, SkScalar B, SkScalar C, SkScalar roots[2]) {
85 SkScalar* r = roots;
93 SkScalar R = SkDoubleToScalar(dr);
98 SkScalar Q = (B < 0) ? -(B-R)/2 : -(B+R)/2;
115 void SkEvalQuadAt(const SkPoint src[3], SkScalar t, SkPoint* pt, SkVector* tangent) {
127 SkPoint SkEvalQuadAt(const SkPoint src[3], SkScalar t) {
131 SkVector SkEvalQuadTangentAt(const SkPoint src[3], SkScalar t) {
156 void SkChopQuadAt(const SkPoint src[3], SkPoint dst[5], SkScalar t) {
246 int SkFindQuadExtrema(SkScalar a, SkScalar b, SkScalar c, SkScalar tValue[1]) {
253 static inline void flatten_double_quad_extrema(SkScalar coords[14]) {
264 SkScalar a = src[0].fY;
265 SkScalar b = src[1].fY;
266 SkScalar c = src[2].fY;
269 SkScalar tValue;
292 SkScalar a = src[0].fX;
293 SkScalar b = src[1].fX;
294 SkScalar c = src[2].fX;
297 SkScalar tValue;
325 SkScalar SkFindQuadMaxCurvature(const SkPoint src[3]) {
326 SkScalar Ax = src[1].fX - src[0].fX;
327 SkScalar Ay = src[1].fY - src[0].fY;
328 SkScalar Bx = src[0].fX - src[1].fX - src[1].fX + src[2].fX;
329 SkScalar By = src[0].fY - src[1].fY - src[1].fY + src[2].fY;
331 SkScalar numer = -(Ax * Bx + Ay * By);
332 SkScalar denom = Bx * Bx + By * By;
343 SkScalar t = numer / denom;
349 SkScalar t = SkFindQuadMaxCurvature(src);
375 static SkVector eval_cubic_derivative(const SkPoint src[4], SkScalar t) {
388 static SkVector eval_cubic_2ndDerivative(const SkPoint src[4], SkScalar t) {
399 void SkEvalCubicAt(const SkPoint src[4], SkScalar t, SkPoint* loc,
435 int SkFindCubicExtrema(SkScalar a, SkScalar b, SkScalar c, SkScalar d,
436 SkScalar tValues[2]) {
438 SkScalar A = d - a + 3*(b - c);
439 SkScalar B = 2*(a - b - b + c);
440 SkScalar C = b - a;
454 void SkChopCubicAt(const SkPoint src[4], SkPoint dst[7], SkScalar t) {
526 const SkScalar tValues[], int tCount) {
529 SkASSERT(std::all_of(tValues, tValues + tCount, [](SkScalar t) { return t >= 0 && t <= 1; }));
672 static void flatten_double_cubic_extrema(SkScalar coords[14]) {
685 SkScalar tValues[2];
701 SkScalar tValues[2];
727 int SkFindCubicInflections(const SkPoint src[4], SkScalar tValues[]) {
728 SkScalar Ax = src[1].fX - src[0].fX;
729 SkScalar Ay = src[1].fY - src[0].fY;
730 SkScalar Bx = src[2].fX - 2 * src[1].fX + src[0].fX;
731 SkScalar By = src[2].fY - 2 * src[1].fY + src[0].fY;
732 SkScalar Cx = src[3].fX + 3 * (src[1].fX - src[2].fX) - src[0].fX;
733 SkScalar Cy = src[3].fY + 3 * (src[1].fY - src[2].fY) - src[0].fY;
742 SkScalar tValues[2];
882 static int collaps_duplicates(SkScalar array[], int count) {
904 const SkScalar src0[] = { 0 };
905 const SkScalar src1[] = { 0, 0 };
906 const SkScalar src2[] = { 0, 1 };
907 const SkScalar src3[] = { 0, 0, 0 };
908 const SkScalar src4[] = { 0, 0, 1 };
909 const SkScalar src5[] = { 0, 1, 1 };
910 const SkScalar src6[] = { 0, 1, 2 };
912 const SkScalar* fData;
925 SkScalar dst[3];
936 static SkScalar SkScalarCubeRoot(SkScalar x) {
947 static int solve_cubic_poly(const SkScalar coeff[4], SkScalar tValues[3]) {
952 SkScalar a, b, c, Q, R;
957 SkScalar inva = SkScalarInvert(coeff[0]);
965 SkScalar Q3 = Q * Q * Q;
966 SkScalar R2MinusQ3 = R * R - Q3;
967 SkScalar adiv3 = a / 3;
971 SkScalar theta = SkScalarACos(SkTPin(R / SkScalarSqrt(Q3), -1.0f, 1.0f));
972 SkScalar neg2RootQ = -2 * SkScalarSqrt(Q);
983 SkScalar A = SkScalarAbs(R) + SkScalarSqrt(R2MinusQ3);
1007 static void formulate_F1DotF2(const SkScalar src[], SkScalar coeff[4]) {
1008 SkScalar a = src[2] - src[0];
1009 SkScalar b = src[4] - 2 * src[2] + src[0];
1010 SkScalar c = src[6] + 3 * (src[2] - src[4]) - src[0];
1029 int SkFindCubicMaxCurvature(const SkPoint src[4], SkScalar tValues[3]) {
1030 SkScalar coeffX[4], coeffY[4];
1047 SkScalar tValues[3]) {
1048 SkScalar t_storage[3];
1054 SkScalar roots[3];
1077 static SkScalar calc_cubic_precision(const SkPoint src[4]) {
1087 SkScalar crosses[2];
1098 SkScalar SkFindCubicCusp(const SkPoint src[4]) {
1116 SkScalar maxCurvature[3];
1119 SkScalar testT = maxCurvature[index];
1127 SkScalar dPtMagnitude = SkPointPriv::LengthSqd(dPt);
1128 SkScalar precision = calc_cubic_precision(src);
1142 static bool cubic_dchop_at_intercept(const SkPoint src[4], SkScalar intercept, SkPoint dst[7],
1157 bool SkChopMonoCubicAtY(SkPoint src[4], SkScalar y, SkPoint dst[7]) {
1161 bool SkChopMonoCubicAtX(SkPoint src[4], SkScalar x, SkPoint dst[7]) {
1196 static void conic_deriv_coeff(const SkScalar src[],
1197 SkScalar w,
1198 SkScalar coeff[3]) {
1199 const SkScalar P20 = src[4] - src[0];
1200 const SkScalar P10 = src[2] - src[0];
1201 const SkScalar wP10 = w * P10;
1207 static bool conic_find_extrema(const SkScalar src[], SkScalar w, SkScalar* t) {
1208 SkScalar coeff[3];
1211 SkScalar tValues[2];
1223 static void p3d_interp(const SkScalar src[7], SkScalar dst[7], SkScalar t) {
1224 SkScalar ab = SkScalarInterp(src[0], src[3], t);
1225 SkScalar bc = SkScalarInterp(src[3], src[6], t);
1231 static void ratquad_mapTo3D(const SkPoint src[3], SkScalar w, SkPoint3 dst[3]) {
1242 bool SkConic::chopAt(SkScalar t, SkConic dst[2]) const {
1265 SkScalar root = SkScalarSqrt(tmp2[1].fZ);
1268 SkASSERT(sizeof(dst[0]) == sizeof(SkScalar) * 7);
1273 void SkConic::chopAt(SkScalar t1, SkScalar t2, SkConic* dst) const {
1305 SkPoint SkConic::evalAt(SkScalar t) const {
1309 SkVector SkConic::evalTangentAt(SkScalar t) const {
1331 void SkConic::evalAt(SkScalar t, SkPoint* pt, SkVector* tangent) const {
1342 static SkScalar subdivide_w_value(SkScalar w) {
1348 SkScalar newW = subdivide_w_value(fW);
1379 SkScalar a = fW - 1; \
1380 SkScalar k = a / (4 * (2 + a)); \
1381 SkScalar x = k * (fPts[0].fX - 2 * fPts[1].fX + fPts[2].fX); \
1382 SkScalar y = k * (fPts[0].fY - 2 * fPts[1].fY + fPts[2].fY);
1389 bool SkConic::asQuadTol(SkScalar tol) const {
1397 int SkConic::computeQuadPOW2(SkScalar tol) const {
1404 SkScalar error = SkScalarSqrt(x * x + y * y);
1414 SkScalar err = SkScalarSqrt(x * x + y * y);
1418 SkScalar tol2 = tol * tol;
1422 SkScalar fpow2 = SkScalarLog2((x * x + y * y) / tol2) * 0.25f;
1434 static bool between(SkScalar a, SkScalar b, SkScalar c) {
1447 const SkScalar startY = src.fPts[0].fY;
1448 SkScalar endY = src.fPts[2].fY;
1452 SkScalar midY = dst[0].fPts[2].fY;
1455 SkScalar closerY = SkTAbs(midY - startY) < SkTAbs(midY - endY) ? startY : endY;
1548 bool SkConic::findXExtrema(SkScalar* t) const {
1552 bool SkConic::findYExtrema(SkScalar* t) const {
1557 SkScalar t;
1565 SkScalar value = dst[0].fPts[2].fX;
1575 SkScalar t;
1583 SkScalar value = dst[0].fPts[2].fY;
1598 SkScalar t;
1613 bool SkConic::findMaxCurvature(SkScalar* t) const {
1619 SkScalar SkConic::TransformW(const SkPoint pts[], SkScalar w, const SkMatrix& matrix) {
1641 SkScalar x = SkPoint::DotProduct(uStart, uStop);
1642 SkScalar y = SkPoint::CrossProduct(uStart, uStop);
1644 SkScalar absY = SkScalarAbs(y);
1683 const SkScalar quadrantWeight = SK_ScalarRoot2Over2;
1693 const SkScalar dot = SkVector::DotProduct(lastQ, finalP);
1703 const SkScalar cosThetaOver2 = SkScalarSqrt((1 + dot) / 2);