14
TEST(vec3PointSegmentDist)
16
ccd_vec3_t P, a, b, w, ew;
19
ccdVec3Set(&a, 0., 0., 0.);
20
ccdVec3Set(&b, 1., 0., 0.);
23
ccdVec3Set(&P, -1., 0., 0.);
24
dist = ccdVec3PointSegmentDist2(&P, &a, &b, &w);
25
assertTrue(ccdEq(dist, 1.));
26
assertTrue(ccdVec3Eq(&w, &a));
28
ccdVec3Set(&P, -0.5, 0., 0.);
29
dist = ccdVec3PointSegmentDist2(&P, &a, &b, &w);
30
assertTrue(ccdEq(dist, 0.5 * 0.5));
31
assertTrue(ccdVec3Eq(&w, &a));
33
ccdVec3Set(&P, -0.1, 0., 0.);
34
dist = ccdVec3PointSegmentDist2(&P, &a, &b, &w);
35
assertTrue(ccdEq(dist, .1 * .1));
36
assertTrue(ccdVec3Eq(&w, &a));
38
ccdVec3Set(&P, 0., 0., 0.);
39
dist = ccdVec3PointSegmentDist2(&P, &a, &b, &w);
40
assertTrue(ccdEq(dist, 0.));
41
assertTrue(ccdVec3Eq(&w, &a));
43
ccdVec3Set(&P, -1., 1., 0.);
44
dist = ccdVec3PointSegmentDist2(&P, &a, &b, &w);
45
assertTrue(ccdEq(dist, 2.));
46
assertTrue(ccdVec3Eq(&w, &a));
48
ccdVec3Set(&P, -0.5, 0.5, 0.);
49
dist = ccdVec3PointSegmentDist2(&P, &a, &b, &w);
50
assertTrue(ccdEq(dist, 0.5));
51
assertTrue(ccdVec3Eq(&w, &a));
53
ccdVec3Set(&P, -0.1, -1., 2.);
54
dist = ccdVec3PointSegmentDist2(&P, &a, &b, &w);
55
assertTrue(ccdEq(dist, 5.01));
56
assertTrue(ccdVec3Eq(&w, &a));
60
ccdVec3Set(&P, 2., 0., 0.);
61
dist = ccdVec3PointSegmentDist2(&P, &a, &b, &w);
62
assertTrue(ccdEq(dist, 1.));
63
assertTrue(ccdVec3Eq(&w, &b));
65
ccdVec3Set(&P, 1.5, 0., 0.);
66
dist = ccdVec3PointSegmentDist2(&P, &a, &b, &w);
67
assertTrue(ccdEq(dist, 0.5 * 0.5));
68
assertTrue(ccdVec3Eq(&w, &b));
70
ccdVec3Set(&P, 1.1, 0., 0.);
71
dist = ccdVec3PointSegmentDist2(&P, &a, &b, &w);
72
assertTrue(ccdEq(dist, .1 * .1));
73
assertTrue(ccdVec3Eq(&w, &b));
75
ccdVec3Set(&P, 1., 0., 0.);
76
dist = ccdVec3PointSegmentDist2(&P, &a, &b, &w);
77
assertTrue(ccdEq(dist, 0.));
78
assertTrue(ccdVec3Eq(&w, &b));
80
ccdVec3Set(&P, 2., 1., 0.);
81
dist = ccdVec3PointSegmentDist2(&P, &a, &b, &w);
82
assertTrue(ccdEq(dist, 2.));
83
assertTrue(ccdVec3Eq(&w, &b));
85
ccdVec3Set(&P, 1.5, 0.5, 0.);
86
dist = ccdVec3PointSegmentDist2(&P, &a, &b, &w);
87
assertTrue(ccdEq(dist, 0.5));
88
assertTrue(ccdVec3Eq(&w, &b));
90
ccdVec3Set(&P, 1.1, -1., 2.);
91
dist = ccdVec3PointSegmentDist2(&P, &a, &b, &w);
92
assertTrue(ccdEq(dist, 5.01));
93
assertTrue(ccdVec3Eq(&w, &b));
96
ccdVec3Set(&P, .5, 0., 0.);
97
dist = ccdVec3PointSegmentDist2(&P, &a, &b, &w);
98
assertTrue(ccdEq(dist, 0.));
99
assertTrue(ccdVec3Eq(&w, &P));
101
ccdVec3Set(&P, .9, 0., 0.);
102
dist = ccdVec3PointSegmentDist2(&P, &a, &b, &w);
103
assertTrue(ccdEq(dist, 0.));
104
assertTrue(ccdVec3Eq(&w, &P));
106
ccdVec3Set(&P, .5, 1., 0.);
107
dist = ccdVec3PointSegmentDist2(&P, &a, &b, &w);
108
assertTrue(ccdEq(dist, 1.));
109
ccdVec3Set(&ew, 0.5, 0., 0.);
110
assertTrue(ccdVec3Eq(&w, &ew));
112
ccdVec3Set(&P, .5, 1., 1.);
113
dist = ccdVec3PointSegmentDist2(&P, &a, &b, &w);
114
assertTrue(ccdEq(dist, 2.));
115
ccdVec3Set(&ew, 0.5, 0., 0.);
116
assertTrue(ccdVec3Eq(&w, &ew));
120
ccdVec3Set(&a, -.5, 2., 1.);
121
ccdVec3Set(&b, 1., 1.5, 0.5);
124
ccdVec3Set(&P, -10., 0., 0.);
125
dist = ccdVec3PointSegmentDist2(&P, &a, &b, &w);
126
assertTrue(ccdEq(dist, 9.5 * 9.5 + 2. * 2. + 1.));
127
assertTrue(ccdVec3Eq(&w, &a));
129
ccdVec3Set(&P, -10., 9.2, 3.4);
130
dist = ccdVec3PointSegmentDist2(&P, &a, &b, &w);
131
assertTrue(ccdEq(dist, 9.5 * 9.5 + 7.2 * 7.2 + 2.4 * 2.4));
132
assertTrue(ccdVec3Eq(&w, &a));
135
ccdVec3Set(&P, 10., 0., 0.);
136
dist = ccdVec3PointSegmentDist2(&P, &a, &b, &w);
137
assertTrue(ccdEq(dist, 9. * 9. + 1.5 * 1.5 + 0.5 * 0.5));
138
assertTrue(ccdVec3Eq(&w, &b));
140
ccdVec3Set(&P, 10., 9.2, 3.4);
141
dist = ccdVec3PointSegmentDist2(&P, &a, &b, &w);
142
assertTrue(ccdEq(dist, 9. * 9. + 7.7 * 7.7 + 2.9 * 2.9));
143
assertTrue(ccdVec3Eq(&w, &b));
146
ccdVec3Set(&a, -.1, 1., 1.);
147
ccdVec3Set(&b, 1., 1., 1.);
148
ccdVec3Set(&P, 0., 0., 0.);
149
dist = ccdVec3PointSegmentDist2(&P, &a, &b, &w);
150
assertTrue(ccdEq(dist, 2.));
151
ccdVec3Set(&ew, 0., 1., 1.);
152
assertTrue(ccdVec3Eq(&w, &ew));
156
TEST(vec3PointTriDist)
158
ccd_vec3_t P, a, b, c, w, P0;
161
ccdVec3Set(&a, -1., 0., 0.);
162
ccdVec3Set(&b, 0., 1., 1.);
163
ccdVec3Set(&c, -1., 0., 1.);
165
ccdVec3Set(&P, -1., 0., 0.);
166
dist = ccdVec3PointTriDist2(&P, &a, &b, &c, &w);
167
assertTrue(ccdEq(dist, 0.));
168
assertTrue(ccdVec3Eq(&w, &a));
170
ccdVec3Set(&P, 0., 1., 1.);
171
dist = ccdVec3PointTriDist2(&P, &a, &b, &c, &w);
172
assertTrue(ccdEq(dist, 0.));
173
assertTrue(ccdVec3Eq(&w, &b));
175
ccdVec3Set(&P, -1., 0., 1.);
176
dist = ccdVec3PointTriDist2(&P, &a, &b, &c, &w);
177
assertTrue(ccdEq(dist, 0.));
178
assertTrue(ccdVec3Eq(&w, &c));
180
ccdVec3Set(&P, 0., 0., 0.);
181
dist = ccdVec3PointTriDist2(&P, &a, &b, &c, NULL);
182
assertTrue(ccdEq(dist, 2./3.));
186
ccdVec3Set(&P, -2., 0., 0.);
187
dist = ccdVec3PointTriDist2(&P, &a, &b, &c, &w);
188
assertTrue(ccdEq(dist, ccdVec3Dist2(&P, &a)));
189
assertTrue(ccdVec3Eq(&w, &a));
190
ccdVec3Set(&P, -2., 0.2, -1.);
191
dist = ccdVec3PointTriDist2(&P, &a, &b, &c, &w);
192
assertTrue(ccdEq(dist, ccdVec3Dist2(&P, &a)));
193
assertTrue(ccdVec3Eq(&w, &a));
196
ccdVec3Set(&P, -1.3, 0., 1.2);
197
dist = ccdVec3PointTriDist2(&P, &a, &b, &c, &w);
198
assertTrue(ccdEq(dist, ccdVec3Dist2(&P, &c)));
199
assertTrue(ccdVec3Eq(&w, &c));
200
ccdVec3Set(&P, -1.2, 0.2, 1.1);
201
dist = ccdVec3PointTriDist2(&P, &a, &b, &c, &w);
202
assertTrue(ccdEq(dist, ccdVec3Dist2(&P, &c)));
203
assertTrue(ccdVec3Eq(&w, &c));
206
ccdVec3Set(&P, 0.3, 1., 1.);
207
dist = ccdVec3PointTriDist2(&P, &a, &b, &c, &w);
208
assertTrue(ccdEq(dist, ccdVec3Dist2(&P, &b)));
209
assertTrue(ccdVec3Eq(&w, &b));
210
ccdVec3Set(&P, .1, 1., 1.);
211
dist = ccdVec3PointTriDist2(&P, &a, &b, &c, &w);
212
assertTrue(ccdEq(dist, ccdVec3Dist2(&P, &b)));
213
assertTrue(ccdVec3Eq(&w, &b));
216
ccdVec3Set(&P, 0., 1., 2.);
217
dist = ccdVec3PointTriDist2(&P, &a, &b, &c, &w);
218
assertTrue(ccdEq(dist, 1.));
219
assertTrue(ccdVec3Eq(&w, &b));
220
ccdVec3Set(&P, -1., 0., 2.);
221
dist = ccdVec3PointTriDist2(&P, &a, &b, &c, &w);
222
assertTrue(ccdEq(dist, 1.));
223
assertTrue(ccdVec3Eq(&w, &c));
224
ccdVec3Set(&P, -0.5, 0.5, 2.);
225
dist = ccdVec3PointTriDist2(&P, &a, &b, &c, &w);
226
assertTrue(ccdEq(dist, 1.));
227
ccdVec3Set(&P0, -0.5, 0.5, 1.);
228
assertTrue(ccdVec3Eq(&w, &P0));
231
ccdVec3Set(&P, -2., -1., 0.7);
232
dist = ccdVec3PointTriDist2(&P, &a, &b, &c, &w);
233
assertTrue(ccdEq(dist, 2.));
234
ccdVec3Set(&P0, -1., 0., 0.7);
235
assertTrue(ccdVec3Eq(&w, &P0));
238
ccdVec3Set(&P, 0., 0., 0.);
239
dist = ccdVec3PointTriDist2(&P, &a, &b, &c, &w);
240
assertTrue(ccdEq(dist, 2./3.));
241
ccdVec3Set(&P0, -2./3., 1./3., 1./3.);
242
assertTrue(ccdVec3Eq(&w, &P0));
245
ccdVec3Set(&P, -0.5, 0.5, 0.5);
246
dist = ccdVec3PointTriDist2(&P, &a, &b, &c, &w);
247
assertTrue(ccdEq(dist, 0.));
248
assertTrue(ccdVec3Eq(&w, &P));
249
ccdVec3Set(&P, -0.5, 0.5, 0.7);
250
dist = ccdVec3PointTriDist2(&P, &a, &b, &c, &w);
251
assertTrue(ccdEq(dist, 0.));
252
assertTrue(ccdVec3Eq(&w, &P));
253
ccdVec3Set(&P, -0.5, 0.5, 0.9);
254
dist = ccdVec3PointTriDist2(&P, &a, &b, &c, &w);
255
assertTrue(ccdEq(dist, 0.));
256
assertTrue(ccdVec3Eq(&w, &P));
258
ccdVec3Set(&P, 0., 0., 0.5);
259
dist = ccdVec3PointTriDist2(&P, &a, &b, &c, &w);
260
assertTrue(ccdEq(dist, 0.5));
261
ccdVec3Set(&P0, -.5, .5, .5);
262
assertTrue(ccdVec3Eq(&w, &P0));
264
ccdVec3Set(&a, -1., 0., 0.);
265
ccdVec3Set(&b, 0., 1., -1.);
266
ccdVec3Set(&c, 0., 1., 1.);
267
ccdVec3Set(&P, 0., 0., 0.);
268
dist = ccdVec3PointTriDist2(&P, &a, &b, &c, &w);
269
assertTrue(ccdEq(dist, 0.5));
270
ccdVec3Set(&P0, -.5, .5, 0.);
271
assertTrue(ccdVec3Eq(&w, &P0));
272
//fprintf(stderr, "dist: %lf\n", dist);