25 const double P20 =
src[4] -
src[0];
26 const double P10 =
src[2] -
src[0];
27 const double wP10 =
w * P10;
28 coeff[0] =
w * P20 - P20;
29 coeff[1] = P20 - 2 * wP10;
36 return t * (t * coeff[0] + coeff[1]) + coeff[2];
76 double src2w =
src[2] *
w;
78 double A =
src[4] - 2 * src2w +
C;
79 double B = 2 * (src2w -
C);
80 return (
A * t +
B) * t +
C;
85 double B = 2 * (
w - 1);
88 return (
A * t +
B) * t +
C;
137 }
else if (t1 != 1) {
146 double midT = (t1 + t2) / 2;
155 }
else if (t2 != 0) {
164 double bx = 2 *
dx - (
ax + cx) / 2;
165 double by = 2 * dy - (ay + cy) / 2;
166 double bz = 2 * dz - (az + cz) / 2;
170 SkDConic dst = {{{{
ax / az, ay / az}, {bx / bz, by / bz}, {cx / cz, cy / cz}}
void SK_SPI SkDebugf(const char format[],...) SK_PRINTF_LIKE(1
static constexpr double sk_ieee_double_divide(double numer, double denom)
static double conic_eval_numerator(const double src[], SkScalar w, double t)
static double conic_eval_denominator(SkScalar w, double t)
static double conic_eval_tan(const double coord[], SkScalar w, double t)
static void conic_deriv_coeff(const double src[], SkScalar w, double coeff[3])
#define SkDEBUGPARAMS(...)
bool zero_or_one(double x)
#define SkDoubleToScalar(x)
int intersectRay(SkIntersections *i, const SkDLine &line) const override
bool hullIntersects(const SkDQuad &quad, bool *isLinear) const override
void setBounds(SkDRect *) const override
sk_sp< SkBlender > blender SkRect rect
skia_private::AutoTArray< sk_sp< SkImageFilter > > filters TypedMatrix matrix TypedMatrix matrix SkScalar dx
SIN Vec< N, float > sqrt(const Vec< N, float > &x)
SkDPoint ptAtT(double t) const
static int FindExtrema(const double src[], SkScalar weight, double tValue[1])
SkDConic subDivide(double t1, double t2) const
bool isLinear(int startIndex, int endIndex) const
SkDVector dxdyAtT(double t) const
bool hullIntersects(const SkDQuad &quad, bool *isLinear) const
static int RootsValidT(const double A, const double B, const double C, double s[2])
bool hullIntersects(const SkDQuad &, bool *isLinear) const