19e49fb63d355446b91d20ff78ad78b297e89a50dcaryclark@google.com/* 29e49fb63d355446b91d20ff78ad78b297e89a50dcaryclark@google.com * Copyright 2012 Google Inc. 39e49fb63d355446b91d20ff78ad78b297e89a50dcaryclark@google.com * 49e49fb63d355446b91d20ff78ad78b297e89a50dcaryclark@google.com * Use of this source code is governed by a BSD-style license that can be 59e49fb63d355446b91d20ff78ad78b297e89a50dcaryclark@google.com * found in the LICENSE file. 69e49fb63d355446b91d20ff78ad78b297e89a50dcaryclark@google.com */ 715dd300ac6d7695b4d2aca81d8f3648eae704451skia.committer@gmail.com 873ca6243b31e225e9fd5b75a96cbc82d62557de6caryclark@google.com#if !defined QUADRATIC_UTILITIES_H 973ca6243b31e225e9fd5b75a96cbc82d62557de6caryclark@google.com#define QUADRATIC_UTILITIES_H 1073ca6243b31e225e9fd5b75a96cbc82d62557de6caryclark@google.com 118dcf114db9762c02d217beba6e29dffa4e92d298caryclark@google.com#include "DataTypes.h" 129d5f99bc309a7d733e33a149bef295ae3c8b3ac1caryclark@google.com 139f60291c5375457f8adf228dbe6e8ff1186b13e1caryclark@google.comint add_valid_ts(double s[], int realRoots, double* t); 149d5f99bc309a7d733e33a149bef295ae3c8b3ac1caryclark@google.comvoid chop_at(const Quadratic& src, QuadraticPair& dst, double t); 1505c4bad470722bc4e5e6ae3d79aa8bcf9e732f06caryclark@google.comdouble dx_at_t(const Quadratic& , double t); 1605c4bad470722bc4e5e6ae3d79aa8bcf9e732f06caryclark@google.comdouble dy_at_t(const Quadratic& , double t); 177ff5c841bf669826b4cbd708ae1a6b3527f15dcacaryclark@google.com//void dxdy_at_t(const Quadratic& , double t, _Point& xy); 187ff5c841bf669826b4cbd708ae1a6b3527f15dcacaryclark@google.com_Vector dxdy_at_t(const Quadratic& , double t); 197ff5c841bf669826b4cbd708ae1a6b3527f15dcacaryclark@google.com 20beda389e646d6be3cfef853584a78ca8ba39d0fccaryclark@google.comdouble nearestT(const Quadratic& , const _Point& ); 21beda389e646d6be3cfef853584a78ca8ba39d0fccaryclark@google.combool point_in_hull(const Quadratic& , const _Point& ); 228dcf114db9762c02d217beba6e29dffa4e92d298caryclark@google.com 23639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com/* Parameterization form, given A*t*t + 2*B*t*(1-t) + C*(1-t)*(1-t) 24639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com * 25639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com * a = A - 2*B + C 26639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com * b = 2*B - 2*C 27639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com * c = C 28639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com */ 2927accef223a27fba437f5e825d99edbae20a045bcaryclark@google.cominline void set_abc(const double* quad, double& a, double& b, double& c) { 30639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com a = quad[0]; // a = A 31639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com b = 2 * quad[2]; // b = 2*B 32639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com c = quad[4]; // c = C 33639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com b -= c; // b = 2*B - C 34639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com a -= b; // a = A - 2*B + C 35639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com b -= c; // b = 2*B - 2*C 36639df891487e40925a4f8d9a34fd3dc0c18b40a7caryclark@google.com} 3727accef223a27fba437f5e825d99edbae20a045bcaryclark@google.com 389f60291c5375457f8adf228dbe6e8ff1186b13e1caryclark@google.comint quadraticRootsReal(double A, double B, double C, double t[2]); 399f60291c5375457f8adf228dbe6e8ff1186b13e1caryclark@google.comint quadraticRootsValidT(const double A, const double B, const double C, double s[2]); 409d5f99bc309a7d733e33a149bef295ae3c8b3ac1caryclark@google.comvoid sub_divide(const Quadratic& src, double t1, double t2, Quadratic& dst); 41c83c70e911a38aea03db4af8dd9841d0d77bd129caryclark@google.com_Point sub_divide(const Quadratic& src, const _Point& a, const _Point& c, double t1, double t2); 42d0a19eb9140ecb968357f798f06d2b052b51fd89caryclark@google.comvoid toCubic(const Quadratic& , Cubic& ); 4345a8fc6a8b00451f807783f2a6ec640e9bcc7256caryclark@google.com_Point top(const Quadratic& , double startT, double endT); 448dcf114db9762c02d217beba6e29dffa4e92d298caryclark@google.comvoid xy_at_t(const Quadratic& , double t, double& x, double& y); 4547d73daa7a971e7eee5822def7922f7d43b2dc47caryclark@google.com_Point xy_at_t(const Quadratic& , double t); 4673ca6243b31e225e9fd5b75a96cbc82d62557de6caryclark@google.com 4773ca6243b31e225e9fd5b75a96cbc82d62557de6caryclark@google.com#endif 48