| OLD | NEW |
| (Empty) |
| 1 /* | |
| 2 * Copyright 2012 Google Inc. | |
| 3 * | |
| 4 * Use of this source code is governed by a BSD-style license that can be | |
| 5 * found in the LICENSE file. | |
| 6 */ | |
| 7 #include "CurveIntersection.h" | |
| 8 #include "CurveUtilities.h" | |
| 9 #include "Extrema.h" | |
| 10 | |
| 11 double leftMostT(const Quadratic& quad, double startT, double endT) { | |
| 12 double leftT; | |
| 13 if (findExtrema(quad[0].x, quad[1].x, quad[2].x, &leftT) | |
| 14 && startT <= leftT && leftT <= endT) { | |
| 15 return leftT; | |
| 16 } | |
| 17 _Point startPt; | |
| 18 xy_at_t(quad, startT, startPt.x, startPt.y); | |
| 19 _Point endPt; | |
| 20 xy_at_t(quad, endT, endPt.x, endPt.y); | |
| 21 return startPt.x <= endPt.x ? startT : endT; | |
| 22 } | |
| 23 | |
| 24 void _Rect::setBounds(const Quadratic& quad) { | |
| 25 set(quad[0]); | |
| 26 add(quad[2]); | |
| 27 double tValues[2]; | |
| 28 int roots = 0; | |
| 29 if (!between(quad[0].x, quad[1].x, quad[2].x)) { | |
| 30 roots = findExtrema(quad[0].x, quad[1].x, quad[2].x, tValues); | |
| 31 } | |
| 32 if (!between(quad[0].y, quad[1].y, quad[2].y)) { | |
| 33 roots += findExtrema(quad[0].y, quad[1].y, quad[2].y, &tValues[roots]); | |
| 34 } | |
| 35 for (int x = 0; x < roots; ++x) { | |
| 36 _Point result; | |
| 37 xy_at_t(quad, tValues[x], result.x, result.y); | |
| 38 add(result); | |
| 39 } | |
| 40 } | |
| 41 | |
| 42 void _Rect::setRawBounds(const Quadratic& quad) { | |
| 43 set(quad[0]); | |
| 44 for (int x = 1; x < 3; ++x) { | |
| 45 add(quad[x]); | |
| 46 } | |
| 47 } | |
| OLD | NEW |