Lines Matching refs:quad

19 static int coincident_line(const Quadratic& quad, Quadratic& reduction) {
20 reduction[0] = reduction[1] = quad[0];
24 static int vertical_line(const Quadratic& quad, ReduceOrder_Styles reduceStyle,
27 reduction[0] = quad[0];
28 reduction[1] = quad[2];
34 if (findExtrema(quad[0].y, quad[1].y, quad[2].y, &tValue)) {
35 double yExtrema = interp_quad_coords(quad[0].y, quad[1].y, quad[2].y, tValue);
45 static int horizontal_line(const Quadratic& quad, ReduceOrder_Styles reduceStyle,
48 reduction[0] = quad[0];
49 reduction[1] = quad[2];
55 if (findExtrema(quad[0].x, quad[1].x, quad[2].x, &tValue)) {
56 double xExtrema = interp_quad_coords(quad[0].x, quad[1].x, quad[2].x, tValue);
66 static int check_linear(const Quadratic& quad, ReduceOrder_Styles reduceStyle,
70 while (quad[startIndex].approximatelyEqual(quad[endIndex])) {
77 if (!isLinear(quad, startIndex, endIndex)) {
81 reduction[0] = quad[0];
82 reduction[1] = quad[2];
87 bool useX = quad[maxX].x - quad[minX].x >= quad[maxY].y - quad[minY].y;
89 sameSide = sign(quad[0].x - quad[1].x) + sign(quad[2].x - quad[1].x);
91 sameSide = sign(quad[0].y - quad[1].y) + sign(quad[2].y - quad[1].y);
99 root = findExtrema(quad[0].x, quad[1].x, quad[2].x, &tValue);
101 root = findExtrema(quad[0].y, quad[1].y, quad[2].y, &tValue);
105 extrema.x = interp_quad_coords(quad[0].x, quad[1].x, quad[2].x, tValue);
106 extrema.y = interp_quad_coords(quad[0].y, quad[1].y, quad[2].y, tValue);
110 if (extrema.x < quad[0].x ^ extrema.x < quad[2].x) {
113 replace = (extrema.x < quad[0].x | extrema.x < quad[2].x)
114 ^ (quad[0].x < quad[2].x);
116 if (extrema.y < quad[0].y ^ extrema.y < quad[2].y) {
119 replace = (extrema.y < quad[0].y | extrema.y < quad[2].y)
120 ^ (quad[0].y < quad[2].y);
127 bool isLinear(const Quadratic& quad, int startIndex, int endIndex) {
129 lineParameters.quadEndPoints(quad, startIndex, endIndex);
132 double distance = lineParameters.controlPtDistance(quad);
142 int reduceOrder(const Quadratic& quad, Quadratic& reduction, ReduceOrder_Styles reduceStyle) {
148 if (quad[minX].x > quad[index].x) {
151 if (quad[minY].y > quad[index].y) {
154 if (quad[maxX].x < quad[index].x) {
157 if (quad[maxY].y < quad[index].y) {
162 if (AlmostEqualUlps(quad[index].x, quad[minX].x)) {
165 if (AlmostEqualUlps(quad[index].y, quad[minY].y)) {
171 return coincident_line(quad, reduction);
173 return vertical_line(quad, reduceStyle, reduction);
176 return horizontal_line(quad, reduceStyle, reduction);
178 int result = check_linear(quad, reduceStyle, minX, maxX, minY, maxY, reduction);
182 memcpy(reduction, quad, sizeof(Quadratic));