Lines Matching refs:SkScalar
26 static int is_not_monotonic(SkScalar a, SkScalar b, SkScalar c) { in is_not_monotonic()
27 SkScalar ab = a - b; in is_not_monotonic()
28 SkScalar bc = b - c; in is_not_monotonic()
37 static bool is_unit_interval(SkScalar x) { in is_unit_interval()
41 static int valid_unit_divide(SkScalar numer, SkScalar denom, SkScalar* ratio) { in valid_unit_divide()
53 SkScalar r = numer / denom; in valid_unit_divide()
71 int SkFindUnitQuadRoots(SkScalar A, SkScalar B, SkScalar C, SkScalar roots[2]) { in SkFindUnitQuadRoots()
78 SkScalar* r = roots; in SkFindUnitQuadRoots()
80 SkScalar R = B*B - 4*A*C; in SkFindUnitQuadRoots()
92 SkScalar Q = (B < 0) ? -(B-R)/2 : -(B+R)/2; in SkFindUnitQuadRoots()
97 SkTSwap<SkScalar>(roots[0], roots[1]); in SkFindUnitQuadRoots()
107 void SkEvalQuadAt(const SkPoint src[3], SkScalar t, SkPoint* pt, SkVector* tangent) { in SkEvalQuadAt()
119 SkPoint SkEvalQuadAt(const SkPoint src[3], SkScalar t) { in SkEvalQuadAt()
123 SkVector SkEvalQuadTangentAt(const SkPoint src[3], SkScalar t) { in SkEvalQuadTangentAt()
148 void SkChopQuadAt(const SkPoint src[3], SkPoint dst[5], SkScalar t) { in SkChopQuadAt()
175 int SkFindQuadExtrema(SkScalar a, SkScalar b, SkScalar c, SkScalar tValue[1]) { in SkFindQuadExtrema()
182 static inline void flatten_double_quad_extrema(SkScalar coords[14]) { in flatten_double_quad_extrema()
193 SkScalar a = src[0].fY; in SkChopQuadAtYExtrema()
194 SkScalar b = src[1].fY; in SkChopQuadAtYExtrema()
195 SkScalar c = src[2].fY; in SkChopQuadAtYExtrema()
198 SkScalar tValue; in SkChopQuadAtYExtrema()
221 SkScalar a = src[0].fX; in SkChopQuadAtXExtrema()
222 SkScalar b = src[1].fX; in SkChopQuadAtXExtrema()
223 SkScalar c = src[2].fX; in SkChopQuadAtXExtrema()
226 SkScalar tValue; in SkChopQuadAtXExtrema()
254 SkScalar SkFindQuadMaxCurvature(const SkPoint src[3]) { in SkFindQuadMaxCurvature()
255 SkScalar Ax = src[1].fX - src[0].fX; in SkFindQuadMaxCurvature()
256 SkScalar Ay = src[1].fY - src[0].fY; in SkFindQuadMaxCurvature()
257 SkScalar Bx = src[0].fX - src[1].fX - src[1].fX + src[2].fX; in SkFindQuadMaxCurvature()
258 SkScalar By = src[0].fY - src[1].fY - src[1].fY + src[2].fY; in SkFindQuadMaxCurvature()
259 SkScalar t = 0; // 0 means don't chop in SkFindQuadMaxCurvature()
266 SkScalar t = SkFindQuadMaxCurvature(src); in SkChopQuadAtMaxCurvature()
293 static SkScalar eval_cubic(const SkScalar src[], SkScalar t) { in eval_cubic()
302 SkScalar D = src[0]; in eval_cubic()
303 SkScalar A = src[6] + 3*(src[2] - src[4]) - D; in eval_cubic()
304 SkScalar B = 3*(src[4] - src[2] - src[2] + D); in eval_cubic()
305 SkScalar C = 3*(src[2] - D); in eval_cubic()
309 SkScalar ab = SkScalarInterp(src[0], src[2], t); in eval_cubic()
310 SkScalar bc = SkScalarInterp(src[2], src[4], t); in eval_cubic()
311 SkScalar cd = SkScalarInterp(src[4], src[6], t); in eval_cubic()
312 SkScalar abc = SkScalarInterp(ab, bc, t); in eval_cubic()
313 SkScalar bcd = SkScalarInterp(bc, cd, t); in eval_cubic()
319 static SkVector eval_cubic_derivative(const SkPoint src[4], SkScalar t) { in eval_cubic_derivative()
332 static SkVector eval_cubic_2ndDerivative(const SkPoint src[4], SkScalar t) { in eval_cubic_2ndDerivative()
343 void SkEvalCubicAt(const SkPoint src[4], SkScalar t, SkPoint* loc, in SkEvalCubicAt()
383 int SkFindCubicExtrema(SkScalar a, SkScalar b, SkScalar c, SkScalar d, in SkFindCubicExtrema()
384 SkScalar tValues[2]) { in SkFindCubicExtrema()
386 SkScalar A = d - a + 3*(b - c); in SkFindCubicExtrema()
387 SkScalar B = 2*(a - b - b + c); in SkFindCubicExtrema()
388 SkScalar C = b - a; in SkFindCubicExtrema()
393 void SkChopCubicAt(const SkPoint src[4], SkPoint dst[7], SkScalar t) { in SkChopCubicAt()
442 const SkScalar tValues[], int roots) { in SkChopCubicAt()
458 SkScalar t = tValues[0]; in SkChopCubicAt()
488 static void flatten_double_cubic_extrema(SkScalar coords[14]) { in flatten_double_cubic_extrema()
501 SkScalar tValues[2]; in SkChopCubicAtYExtrema()
517 SkScalar tValues[2]; in SkChopCubicAtXExtrema()
543 int SkFindCubicInflections(const SkPoint src[4], SkScalar tValues[]) { in SkFindCubicInflections()
544 SkScalar Ax = src[1].fX - src[0].fX; in SkFindCubicInflections()
545 SkScalar Ay = src[1].fY - src[0].fY; in SkFindCubicInflections()
546 SkScalar Bx = src[2].fX - 2 * src[1].fX + src[0].fX; in SkFindCubicInflections()
547 SkScalar By = src[2].fY - 2 * src[1].fY + src[0].fY; in SkFindCubicInflections()
548 SkScalar Cx = src[3].fX + 3 * (src[1].fX - src[2].fX) - src[0].fX; in SkFindCubicInflections()
549 SkScalar Cy = src[3].fY + 3 * (src[1].fY - src[2].fY) - src[0].fY; in SkFindCubicInflections()
558 SkScalar tValues[2]; in SkChopCubicAtInflections()
580 static SkCubicType classify_cubic(const SkPoint p[4], const SkScalar d[3]) { in classify_cubic()
584 const SkScalar discr = d[0] * d[0] * (3.f * d[1] * d[1] - 4.f * d[0] * d[2]); in classify_cubic()
600 static SkScalar calc_dot_cross_cubic(const SkPoint& p0, const SkPoint& p1, const SkPoint& p2) { in calc_dot_cross_cubic()
601 const SkScalar xComp = p0.fX * (p1.fY - p2.fY); in calc_dot_cross_cubic()
602 const SkScalar yComp = p0.fY * (p2.fX - p1.fX); in calc_dot_cross_cubic()
603 const SkScalar wComp = p1.fX * p2.fY - p1.fY * p2.fX; in calc_dot_cross_cubic()
616 static void calc_cubic_inflection_func(const SkPoint p[4], SkScalar d[3]) { in calc_cubic_inflection_func()
617 SkScalar a1 = calc_dot_cross_cubic(p[0], p[3], p[2]); in calc_cubic_inflection_func()
618 SkScalar a2 = calc_dot_cross_cubic(p[1], p[0], p[3]); in calc_cubic_inflection_func()
619 SkScalar a3 = calc_dot_cross_cubic(p[2], p[1], p[0]); in calc_cubic_inflection_func()
622 SkScalar max = SkScalarAbs(a1); in calc_cubic_inflection_func()
635 SkCubicType SkClassifyCubic(const SkPoint src[4], SkScalar d[3]) { in SkClassifyCubic()
655 static int collaps_duplicates(SkScalar array[], int count) { in collaps_duplicates()
677 const SkScalar src0[] = { 0 }; in test_collaps_duplicates()
678 const SkScalar src1[] = { 0, 0 }; in test_collaps_duplicates()
679 const SkScalar src2[] = { 0, 1 }; in test_collaps_duplicates()
680 const SkScalar src3[] = { 0, 0, 0 }; in test_collaps_duplicates()
681 const SkScalar src4[] = { 0, 0, 1 }; in test_collaps_duplicates()
682 const SkScalar src5[] = { 0, 1, 1 }; in test_collaps_duplicates()
683 const SkScalar src6[] = { 0, 1, 2 }; in test_collaps_duplicates()
685 const SkScalar* fData; in test_collaps_duplicates()
698 SkScalar dst[3]; in test_collaps_duplicates()
709 static SkScalar SkScalarCubeRoot(SkScalar x) { in SkScalarCubeRoot()
720 static int solve_cubic_poly(const SkScalar coeff[4], SkScalar tValues[3]) { in solve_cubic_poly()
725 SkScalar a, b, c, Q, R; in solve_cubic_poly()
730 SkScalar inva = SkScalarInvert(coeff[0]); in solve_cubic_poly()
738 SkScalar Q3 = Q * Q * Q; in solve_cubic_poly()
739 SkScalar R2MinusQ3 = R * R - Q3; in solve_cubic_poly()
740 SkScalar adiv3 = a / 3; in solve_cubic_poly()
742 SkScalar* roots = tValues; in solve_cubic_poly()
743 SkScalar r; in solve_cubic_poly()
746 SkScalar theta = SkScalarACos(R / SkScalarSqrt(Q3)); in solve_cubic_poly()
747 SkScalar neg2RootQ = -2 * SkScalarSqrt(Q); in solve_cubic_poly()
770 SkScalar A = SkScalarAbs(R) + SkScalarSqrt(R2MinusQ3); in solve_cubic_poly()
798 static void formulate_F1DotF2(const SkScalar src[], SkScalar coeff[4]) { in formulate_F1DotF2()
799 SkScalar a = src[2] - src[0]; in formulate_F1DotF2()
800 SkScalar b = src[4] - 2 * src[2] + src[0]; in formulate_F1DotF2()
801 SkScalar c = src[6] + 3 * (src[2] - src[4]) - src[0]; in formulate_F1DotF2()
820 int SkFindCubicMaxCurvature(const SkPoint src[4], SkScalar tValues[3]) { in SkFindCubicMaxCurvature()
821 SkScalar coeffX[4], coeffY[4]; in SkFindCubicMaxCurvature()
831 SkScalar t[3]; in SkFindCubicMaxCurvature()
847 SkScalar tValues[3]) { in SkChopCubicAtMaxCurvature()
848 SkScalar t_storage[3]; in SkChopCubicAtMaxCurvature()
870 static bool cubic_dchop_at_intercept(const SkPoint src[4], SkScalar intercept, SkPoint dst[7], in cubic_dchop_at_intercept()
885 bool SkChopMonoCubicAtY(SkPoint src[4], SkScalar y, SkPoint dst[7]) { in SkChopMonoCubicAtY()
889 bool SkChopMonoCubicAtX(SkPoint src[4], SkScalar x, SkPoint dst[7]) { in SkChopMonoCubicAtX()
924 static void conic_deriv_coeff(const SkScalar src[], in conic_deriv_coeff()
925 SkScalar w, in conic_deriv_coeff()
926 SkScalar coeff[3]) { in conic_deriv_coeff()
927 const SkScalar P20 = src[4] - src[0]; in conic_deriv_coeff()
928 const SkScalar P10 = src[2] - src[0]; in conic_deriv_coeff()
929 const SkScalar wP10 = w * P10; in conic_deriv_coeff()
935 static bool conic_find_extrema(const SkScalar src[], SkScalar w, SkScalar* t) { in conic_find_extrema()
936 SkScalar coeff[3]; in conic_find_extrema()
939 SkScalar tValues[2]; in conic_find_extrema()
951 SkScalar fX, fY, fZ;
953 void set(SkScalar x, SkScalar y, SkScalar z) { in set()
963 static void p3d_interp(const SkScalar src[7], SkScalar dst[7], SkScalar t) { in p3d_interp()
964 SkScalar ab = SkScalarInterp(src[0], src[3], t); in p3d_interp()
965 SkScalar bc = SkScalarInterp(src[3], src[6], t); in p3d_interp()
971 static void ratquad_mapTo3D(const SkPoint src[3], SkScalar w, SkP3D dst[]) { in ratquad_mapTo3D()
977 void SkConic::chopAt(SkScalar t, SkConic dst[2]) const { in chopAt()
1000 SkScalar root = SkScalarSqrt(tmp2[1].fZ); in chopAt()
1005 void SkConic::chopAt(SkScalar t1, SkScalar t2, SkConic* dst) const { in chopAt()
1035 SkPoint SkConic::evalAt(SkScalar t) const { in evalAt()
1039 SkVector SkConic::evalTangentAt(SkScalar t) const { in evalTangentAt()
1061 void SkConic::evalAt(SkScalar t, SkPoint* pt, SkVector* tangent) const { in evalAt()
1072 static SkScalar subdivide_w_value(SkScalar w) { in subdivide_w_value()
1078 SkScalar newW = subdivide_w_value(fW); in chop()
1102 SkScalar a = fW - 1; \
1103 SkScalar k = a / (4 * (2 + a)); \
1104 SkScalar x = k * (fPts[0].fX - 2 * fPts[1].fX + fPts[2].fX); \
1105 SkScalar y = k * (fPts[0].fY - 2 * fPts[1].fY + fPts[2].fY);
1112 bool SkConic::asQuadTol(SkScalar tol) const { in asQuadTol()
1120 int SkConic::computeQuadPOW2(SkScalar tol) const { in computeQuadPOW2()
1127 SkScalar error = SkScalarSqrt(x * x + y * y); in computeQuadPOW2()
1137 SkScalar err = SkScalarSqrt(x * x + y * y); in computeQuadPOW2()
1141 SkScalar tol2 = tol * tol; in computeQuadPOW2()
1145 SkScalar fpow2 = SkScalarLog2((x * x + y * y) / tol2) * 0.25f; in computeQuadPOW2()
1178 bool SkConic::findXExtrema(SkScalar* t) const { in findXExtrema()
1182 bool SkConic::findYExtrema(SkScalar* t) const { in findYExtrema()
1187 SkScalar t; in chopAtXExtrema()
1192 SkScalar value = dst[0].fPts[2].fX; in chopAtXExtrema()
1202 SkScalar t; in chopAtYExtrema()
1207 SkScalar value = dst[0].fPts[2].fY; in chopAtYExtrema()
1222 SkScalar t; in computeTightBounds()
1237 bool SkConic::findMaxCurvature(SkScalar* t) const {
1243 SkScalar SkConic::TransformW(const SkPoint pts[], SkScalar w, in TransformW()
1256 SkScalar w0 = dst[0].fZ; in TransformW()
1257 SkScalar w1 = dst[1].fZ; in TransformW()
1258 SkScalar w2 = dst[2].fZ; in TransformW()
1266 SkScalar x = SkPoint::DotProduct(uStart, uStop); in BuildUnitArc()
1267 SkScalar y = SkPoint::CrossProduct(uStart, uStop); in BuildUnitArc()
1269 SkScalar absY = SkScalarAbs(y); in BuildUnitArc()
1308 const SkScalar quadrantWeight = SK_ScalarRoot2Over2; in BuildUnitArc()
1318 const SkScalar dot = SkVector::DotProduct(lastQ, finalP); in BuildUnitArc()
1328 const SkScalar cosThetaOver2 = SkScalarSqrt((1 + dot) / 2); in BuildUnitArc()