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
8#include "PathOpsQuadIntersectionTestData.h"
9
10const SkDQuad quadraticPoints[] = {
11    {{{0, 0}, {1, 0}, {0, 0}}},
12    {{{0, 0}, {0, 1}, {0, 0}}},
13    {{{0, 0}, {1, 1}, {0, 0}}},
14    {{{1, 1}, {2, 2}, {1, 1}}},
15};
16
17const size_t quadraticPoints_count = SK_ARRAY_COUNT(quadraticPoints);
18
19const SkDQuad quadraticLines[] = {
20    {{{0, 0}, {0, 0}, {1, 0}}},
21    {{{1, 0}, {0, 0}, {0, 0}}},
22    {{{1, 0}, {2, 0}, {3, 0}}},
23    {{{0, 0}, {0, 0}, {0, 1}}},
24    {{{0, 1}, {0, 0}, {0, 0}}},
25    {{{0, 1}, {0, 2}, {0, 3}}},
26    {{{0, 0}, {0, 0}, {1, 1}}},
27    {{{1, 1}, {0, 0}, {0, 0}}},
28    {{{1, 1}, {2, 2}, {3, 3}}},
29    {{{1, 1}, {3, 3}, {3, 3}}},
30    {{{1, 1}, {1, 1}, {2, 2}}},
31    {{{1, 1}, {1, 1}, {3, 3}}},
32    {{{1, 1}, {2, 2}, {4, 4}}},  // no coincident
33    {{{1, 1}, {3, 3}, {4, 4}}},
34    {{{1, 1}, {3, 3}, {2, 2}}},
35    {{{1, 1}, {4, 4}, {2, 2}}},
36    {{{1, 1}, {4, 4}, {3, 3}}},
37    {{{2, 2}, {1, 1}, {3, 3}}},
38    {{{2, 2}, {1, 1}, {4, 4}}},
39    {{{2, 2}, {3, 3}, {1, 1}}},
40    {{{2, 2}, {3, 3}, {4, 4}}},
41    {{{2, 2}, {4, 4}, {1, 1}}},
42    {{{2, 2}, {4, 4}, {3, 3}}},
43};
44
45const size_t quadraticLines_count = SK_ARRAY_COUNT(quadraticLines);
46
47static const double F = FLT_EPSILON * 3;
48static const double H = FLT_EPSILON * 4;
49static const double J = FLT_EPSILON * 5;
50static const double K = FLT_EPSILON * 8;  // INVESTIGATE: why are larger multiples necessary?
51
52const SkDQuad quadraticModEpsilonLines[] = {
53    {{{0, F}, {0, 0}, {1, 0}}},
54    {{{0, 0}, {1, 0}, {0, F}}},
55    {{{1, 0}, {0, F}, {0, 0}}},
56    {{{1, H}, {2, 0}, {3, 0}}},
57//  {{{F, 0}, {0, 0}, {0, 1}}},  // INVESTIGATE: even substituting K for F, quad is still linear.
58//  {{{0, 0}, {0, 1}, {F, 0}}},
59//  {{{0, 1}, {F, 0}, {0, 0}}},
60//  {{{H, 1}, {0, 2}, {0, 3}}},
61    {{{0, F}, {0, 0}, {1, 1}}},
62    {{{0, 0}, {1, 1}, {F, 0}}},
63    {{{1, 1}, {F, 0}, {0, 0}}},
64    {{{1, 1+J}, {2, 2}, {3, 3}}},
65    {{{1, 1}, {3, 3}, {3+F, 3}}},
66    {{{1, 1}, {1+F, 1}, {2, 2}}},
67    {{{1, 1}, {2, 2}, {1, 1+F}}},
68    {{{1, 1}, {1, 1+F}, {3, 3}}},
69    {{{1+H, 1}, {2, 2}, {4, 4}}},  // no coincident
70    {{{1, 1+K}, {3, 3}, {4, 4}}},
71    {{{1, 1}, {3+F, 3}, {2, 2}}},
72    {{{1, 1}, {4, 4+F}, {2, 2}}},
73    {{{1, 1}, {4, 4}, {3+F, 3}}},
74    {{{2, 2}, {1, 1}, {3, 3+F}}},
75    {{{2+F, 2}, {1, 1}, {4, 4}}},
76    {{{2, 2+F}, {3, 3}, {1, 1}}},
77    {{{2, 2}, {3+F, 3}, {4, 4}}},
78    {{{2, 2}, {4, 4+F}, {1, 1}}},
79    {{{2, 2}, {4, 4}, {3+F, 3}}},
80};
81
82const size_t quadraticModEpsilonLines_count =
83        SK_ARRAY_COUNT(quadraticModEpsilonLines);
84
85const SkDQuad quadraticTests[][2] = {
86    {  // one intersection
87     {{{0, 0},
88      {0, 1},
89      {1, 1}}},
90     {{{0, 1},
91      {0, 0},
92      {1, 0}}}
93    },
94    {  // four intersections
95     {{{1, 0},
96      {2, 6},
97      {3, 0}}},
98     {{{0, 1},
99      {6, 2},
100      {0, 3}}}
101    }
102};
103
104const size_t quadraticTests_count = SK_ARRAY_COUNT(quadraticTests);
105