| OLD | NEW |
| (Empty) |
| 1 // included by CubicParameterization.cpp | |
| 2 // accesses internal functions to validate parameterized coefficients | |
| 3 | |
| 4 #include "Parameterization_Test.h" | |
| 5 | |
| 6 static void parameter_coeffs(const Cubic& cubic, double coeffs[coeff_count]) { | |
| 7 #if USE_SYVESTER | |
| 8 double ax, bx, cx, dx; | |
| 9 if (try_alt) | |
| 10 alt_set_abcd(&cubic[0].x, ax, bx, cx, dx); | |
| 11 else | |
| 12 set_abcd(&cubic[0].x, ax, bx, cx, dx); | |
| 13 double ay, by, cy, dy; | |
| 14 if (try_alt) | |
| 15 alt_set_abcd(&cubic[0].y, ay, by, cy, dy); | |
| 16 else | |
| 17 set_abcd(&cubic[0].y, ay, by, cy, dy); | |
| 18 calc_ABCD(ax, ay, coeffs); | |
| 19 if (!try_alt) calc_bc(dx, bx, cx); | |
| 20 if (!try_alt) calc_bc(dy, by, cy); | |
| 21 #else | |
| 22 double ax = cubic[0].x; | |
| 23 double bx = cubic[1].x; | |
| 24 double cx = cubic[2].x; | |
| 25 double dx = cubic[3].x; | |
| 26 double ay = cubic[0].y; | |
| 27 double by = cubic[1].y; | |
| 28 double cy = cubic[2].y; | |
| 29 double dy = cubic[3].y; | |
| 30 calc_ABCD(ax, bx, cx, dx, ay, by, cy, dy, coeffs); | |
| 31 #endif | |
| 32 for (int index = xx_coeff; index < coeff_count; ++index) { | |
| 33 int procIndex = index - xx_coeff; | |
| 34 coeffs[index] = (*calc_proc[procIndex])(ax, bx, cx, dx, ay, by, cy, dy); | |
| 35 } | |
| 36 } | |
| 37 | |
| 38 bool point_on_parameterized_curve(const Cubic& cubic, const _Point& point) { | |
| 39 double coeffs[coeff_count]; | |
| 40 parameter_coeffs(cubic, coeffs); | |
| 41 double xxx = coeffs[xxx_coeff] * point.x * point.x * point.x; | |
| 42 double xxy = coeffs[xxy_coeff] * point.x * point.x * point.y; | |
| 43 double xyy = coeffs[xyy_coeff] * point.x * point.y * point.y; | |
| 44 double yyy = coeffs[yyy_coeff] * point.y * point.y * point.y; | |
| 45 double xx = coeffs[ xx_coeff] * point.x * point.x; | |
| 46 double xy = coeffs[ xy_coeff] * point.x * point.y; | |
| 47 double yy = coeffs[ yy_coeff] * point.y * point.y; | |
| 48 double x = coeffs[ x_coeff] * point.x; | |
| 49 double y = coeffs[ y_coeff] * point.y; | |
| 50 double c = coeffs[ c_coeff]; | |
| 51 double sum = xxx + xxy + xyy + yyy + xx + xy + yy + x + y + c; | |
| 52 return approximately_zero(sum); | |
| 53 } | |
| OLD | NEW |