| 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 "QuadraticUtilities.h" | |
| 8 #include "CurveIntersection.h" | |
| 9 #include "Intersection_Tests.h" | |
| 10 #include "Parameterization_Test.h" | |
| 11 #include "TestUtilities.h" | |
| 12 | |
| 13 const Quadratic quadratics[] = { | |
| 14 {{0, 0}, {1, 0}, {1, 1}}, | |
| 15 }; | |
| 16 | |
| 17 const size_t quadratics_count = sizeof(quadratics) / sizeof(quadratics[0]); | |
| 18 | |
| 19 int firstCubicCoincidenceTest = 0; | |
| 20 | |
| 21 void CubicCoincidence_Test() { | |
| 22 // split large quadratic | |
| 23 // upscale quadratics to cubics | |
| 24 // compare original, parts, to see if the are coincident | |
| 25 for (size_t index = firstCubicCoincidenceTest; index < quadratics_count; ++i
ndex) { | |
| 26 const Quadratic& test = quadratics[index]; | |
| 27 QuadraticPair split; | |
| 28 chop_at(test, split, 0.5); | |
| 29 Quadratic midThird; | |
| 30 sub_divide(test, 1.0/3, 2.0/3, midThird); | |
| 31 Cubic whole, first, second, mid; | |
| 32 quad_to_cubic(test, whole); | |
| 33 quad_to_cubic(split.first(), first); | |
| 34 quad_to_cubic(split.second(), second); | |
| 35 quad_to_cubic(midThird, mid); | |
| 36 if (!implicit_matches(whole, first)) { | |
| 37 SkDebugf("%s-1 %d\n", __FUNCTION__, (int)index); | |
| 38 } | |
| 39 if (!implicit_matches(whole, second)) { | |
| 40 SkDebugf("%s-2 %d\n", __FUNCTION__, (int)index); | |
| 41 } | |
| 42 if (!implicit_matches(mid, first)) { | |
| 43 SkDebugf("%s-3 %d\n", __FUNCTION__, (int)index); | |
| 44 } | |
| 45 if (!implicit_matches(mid, second)) { | |
| 46 SkDebugf("%s-4 %d\n", __FUNCTION__, (int)index); | |
| 47 } | |
| 48 if (!implicit_matches(first, second)) { | |
| 49 SkDebugf("%s-5 %d\n", __FUNCTION__, (int)index); | |
| 50 } | |
| 51 } | |
| 52 } | |
| 53 | |
| 54 // pairs of coincident cubics | |
| 55 // The on curve points of each cubic should be on both parameterized cubics. | |
| 56 const Cubic cubics[] = { | |
| 57 { | |
| 58 { 1, -1}, | |
| 59 { 1.0/3, 1}, | |
| 60 {-1.0/3, -1}, | |
| 61 {-1, 1} | |
| 62 }, | |
| 63 { | |
| 64 {-1, 1}, | |
| 65 {-1.0/3, -1}, | |
| 66 { 1.0/3, 1}, | |
| 67 { 1, -1} | |
| 68 }, | |
| 69 { | |
| 70 {0, 2}, | |
| 71 {0, 1}, | |
| 72 {1, 0}, | |
| 73 {2, 0} | |
| 74 }, { | |
| 75 {2, 0}, | |
| 76 {1, 0}, | |
| 77 {0, 1}, | |
| 78 {0, 2} | |
| 79 }, | |
| 80 { | |
| 81 {315.74799999999999, 312.83999999999997}, | |
| 82 {312.64400000000001, 318.13400000000001}, | |
| 83 {305.83600000000001, 319.90899999999999}, | |
| 84 {300.54199999999997, 316.80399999999997} | |
| 85 }, { | |
| 86 {317.12200000000001, 309.05000000000001}, | |
| 87 {316.11200000000002, 315.10199999999998}, | |
| 88 {310.38499999999999, 319.19}, | |
| 89 {304.33199999999999, 318.17899999999997} | |
| 90 } | |
| 91 }; | |
| 92 | |
| 93 const size_t cubics_count = sizeof(cubics) / sizeof(cubics[0]); | |
| 94 | |
| 95 int firstCubicParameterizationTest = 0; | |
| 96 | |
| 97 void CubicParameterization_Test() { | |
| 98 for (size_t index = firstCubicParameterizationTest; index < cubics_count; ++
index) { | |
| 99 for (size_t inner = 0; inner < 4; inner += 3) { | |
| 100 if (!point_on_parameterized_curve(cubics[index], cubics[index][inner
])) { | |
| 101 SkDebugf("%s [%zu,%zu] 1 parameterization failed\n", | |
| 102 __FUNCTION__, index, inner); | |
| 103 } | |
| 104 if (!point_on_parameterized_curve(cubics[index], cubics[index ^ 1][i
nner])) { | |
| 105 SkDebugf("%s [%zu,%zu] 2 parameterization failed\n", | |
| 106 __FUNCTION__, index, inner); | |
| 107 } | |
| 108 } | |
| 109 if (!implicit_matches(cubics[index], cubics[index ^ 1])) { | |
| 110 SkDebugf("%s %d\n", __FUNCTION__, (int)index); | |
| 111 } | |
| 112 } | |
| 113 } | |
| OLD | NEW |