136TEST(curves_geometry, CatmullRomEvaluation)
140 curves.resolution_for_write().fill(12);
141 curves.offsets_for_write().last() = 4;
142 curves.cyclic_for_write().fill(
false);
145 positions[0] = {1, 1, 0};
146 positions[1] = {0, 1, 0};
147 positions[2] = {0, 0, 0};
148 positions[3] = {-1, 0, 0};
153 {0.948495, 1.00318, 0},
154 {0.87963, 1.01157, 0},
155 {0.796875, 1.02344, 0},
156 {0.703704, 1.03704, 0},
157 {0.603588, 1.05064, 0},
159 {0.396412, 1.07089, 0},
160 {0.296296, 1.07407, 0},
161 {0.203125, 1.07031, 0},
162 {0.12037, 1.05787, 0},
163 {0.0515046, 1.03501, 0},
165 {-0.0318287, 0.948495, 0},
166 {-0.0462963, 0.87963, 0},
167 {-0.046875, 0.796875, 0},
168 {-0.037037, 0.703704, 0},
169 {-0.0202546, 0.603588, 0},
171 {0.0202546, 0.396412, 0},
172 {0.037037, 0.296296, 0},
173 {0.046875, 0.203125, 0},
174 {0.0462963, 0.12037, 0},
175 {0.0318287, 0.0515046, 0},
177 {-0.0515046, -0.0350116, 0},
178 {-0.12037, -0.0578704, 0},
179 {-0.203125, -0.0703125, 0},
180 {-0.296296, -0.0740741, 0},
181 {-0.396412, -0.0708912, 0},
183 {-0.603588, -0.0506366, 0},
184 {-0.703704, -0.037037, 0},
185 {-0.796875, -0.0234375, 0},
186 {-0.87963, -0.0115741, 0},
187 {-0.948495, -0.00318287, 0},
191 EXPECT_V3_NEAR(evaluated_positions[
i], result_1[
i], 1e-5f);
195 curves.tag_positions_changed();
196 curves.evaluated_positions();
203 positions[0] = {1, 0, 0};
204 positions[1] = {1, 1, 0};
205 positions[2] = {0, 1, 0};
206 positions[3] = {0, 0, 0};
207 curves.cyclic_for_write().fill(
true);
210 curves.tag_topology_changed();
213 evaluated_positions =
curves.evaluated_positions();
216 {1.03819, 0.0515046, 0},
217 {1.06944, 0.12037, 0},
218 {1.09375, 0.203125, 0},
219 {1.11111, 0.296296, 0},
220 {1.12153, 0.396412, 0},
222 {1.12153, 0.603588, 0},
223 {1.11111, 0.703704, 0},
224 {1.09375, 0.796875, 0},
225 {1.06944, 0.87963, 0},
226 {1.03819, 0.948495, 0},
228 {0.948495, 1.03819, 0},
229 {0.87963, 1.06944, 0},
230 {0.796875, 1.09375, 0},
231 {0.703704, 1.11111, 0},
232 {0.603588, 1.12153, 0},
234 {0.396412, 1.12153, 0},
235 {0.296296, 1.11111, 0},
236 {0.203125, 1.09375, 0},
237 {0.12037, 1.06944, 0},
238 {0.0515046, 1.03819, 0},
240 {-0.0381944, 0.948495, 0},
241 {-0.0694444, 0.87963, 0},
242 {-0.09375, 0.796875, 0},
243 {-0.111111, 0.703704, 0},
244 {-0.121528, 0.603588, 0},
246 {-0.121528, 0.396412, 0},
247 {-0.111111, 0.296296, 0},
248 {-0.09375, 0.203125, 0},
249 {-0.0694444, 0.12037, 0},
250 {-0.0381944, 0.0515046, 0},
252 {0.0515046, -0.0381944, 0},
253 {0.12037, -0.0694444, 0},
254 {0.203125, -0.09375, 0},
255 {0.296296, -0.111111, 0},
256 {0.396412, -0.121528, 0},
258 {0.603588, -0.121528, 0},
259 {0.703704, -0.111111, 0},
260 {0.796875, -0.09375, 0},
261 {0.87963, -0.0694444, 0},
262 {0.948495, -0.0381944, 0},
265 EXPECT_V3_NEAR(evaluated_positions[
i], result_2[
i], 1e-5f);
281TEST(curves_geometry, BezierPositionEvaluation)
285 curves.resolution_for_write().fill(12);
286 curves.offsets_for_write().last() = 2;
291 positions.
first() = {-1, 0, 0};
292 positions.
last() = {1, 0, 0};
293 handles_right.
first() = {-0.5f, 0.5f, 0.0f};
294 handles_left.
last() = {0, 0, 0};
297 handles_left.
first() = {100, 100, 100};
298 handles_right.
last() = {100, 100, 100};
303 {-0.874711, 0.105035, 0},
304 {-0.747685, 0.173611, 0},
305 {-0.617188, 0.210937, 0},
306 {-0.481481, 0.222222, 0},
307 {-0.338831, 0.212674, 0},
308 {-0.1875, 0.1875, 0},
309 {-0.0257524, 0.15191, 0},
310 {0.148148, 0.111111, 0},
311 {0.335937, 0.0703125, 0},
312 {0.539352, 0.0347222, 0},
313 {0.760127, 0.00954859, 0},
317 EXPECT_V3_NEAR(evaluated_positions[
i], result_1[
i], 1e-5f);
322 curves.resolution_for_write().fill(9);
323 curves.offsets_for_write().last() = 4;
324 handles_left =
curves.handle_positions_left_for_write();
325 handles_right =
curves.handle_positions_right_for_write();
326 positions =
curves.positions_for_write();
327 positions[2] = {-1, 1, 0};
328 positions[3] = {1, 1, 0};
329 handles_right[2] = {-0.5f, 1.5f, 0.0f};
330 handles_left[3] = {0, 1, 0};
333 handles_left[2] = {-100, -100, -100};
334 handles_right[3] = {-100, -100, -100};
336 evaluated_positions =
curves.evaluated_positions();
340 {-0.832647, 0.131687, 0},
341 {-0.66118, 0.201646, 0},
342 {-0.481481, 0.222222, 0},
343 {-0.289438, 0.205761, 0},
344 {-0.0809327, 0.164609, 0},
345 {0.148148, 0.111111, 0},
346 {0.40192, 0.0576133, 0},
347 {0.684499, 0.016461, 0},
350 {-0.832647, 1.13169, 0},
351 {-0.66118, 1.20165, 0},
352 {-0.481481, 1.22222, 0},
353 {-0.289438, 1.20576, 0},
354 {-0.0809327, 1.16461, 0},
355 {0.148148, 1.11111, 0},
356 {0.40192, 1.05761, 0},
357 {0.684499, 1.01646, 0},
361 EXPECT_V3_NEAR(evaluated_positions[
i], result_2[
i], 1e-5f);
365TEST(curves_geometry, NURBSEvaluation)
369 curves.resolution_for_write().fill(10);
370 curves.offsets_for_write().last() = 4;
373 positions[0] = {1, 1, 0};
374 positions[1] = {0, 1, 0};
375 positions[2] = {0, 0, 0};
376 positions[3] = {-1, 0, 0};
380 {0.166667, 0.833333, 0},
381 {0.121333, 0.778667, 0},
383 {0.0526667, 0.647333, 0},
384 {0.0253333, 0.574667, 0},
386 {-0.0253333, 0.425333, 0},
387 {-0.0526667, 0.352667, 0},
389 {-0.121333, 0.221333, 0},
390 {-0.166667, 0.166667, 0},
393 EXPECT_V3_NEAR(evaluated_positions[
i], result_1[
i], 1e-5f);
397 curves.cyclic_for_write().fill(
true);
398 curves.tag_topology_changed();
399 evaluated_positions =
curves.evaluated_positions();
401 {0.166667, 0.833333, 0}, {0.121333, 0.778667, 0},
402 {0.084, 0.716, 0}, {0.0526667, 0.647333, 0},
403 {0.0253333, 0.574667, 0}, {0, 0.5, 0},
404 {-0.0253333, 0.425333, 0}, {-0.0526667, 0.352667, 0},
405 {-0.084, 0.284, 0}, {-0.121333, 0.221333, 0},
406 {-0.166667, 0.166667, 0}, {-0.221, 0.121667, 0},
407 {-0.281333, 0.0866667, 0}, {-0.343667, 0.0616666, 0},
408 {-0.404, 0.0466667, 0}, {-0.458333, 0.0416667, 0},
409 {-0.502667, 0.0466667, 0}, {-0.533, 0.0616666, 0},
410 {-0.545333, 0.0866667, 0}, {-0.535667, 0.121667, 0},
411 {-0.5, 0.166667, 0}, {-0.436, 0.221334, 0},
412 {-0.348, 0.284, 0}, {-0.242, 0.352667, 0},
413 {-0.124, 0.425333, 0}, {0, 0.5, 0},
414 {0.124, 0.574667, 0}, {0.242, 0.647333, 0},
415 {0.348, 0.716, 0}, {0.436, 0.778667, 0},
416 {0.5, 0.833333, 0}, {0.535667, 0.878334, 0},
417 {0.545333, 0.913333, 0}, {0.533, 0.938333, 0},
418 {0.502667, 0.953333, 0}, {0.458333, 0.958333, 0},
419 {0.404, 0.953333, 0}, {0.343667, 0.938333, 0},
420 {0.281333, 0.913333, 0}, {0.221, 0.878333, 0},
423 EXPECT_V3_NEAR(evaluated_positions[
i], result_2[
i], 1e-5f);
427 positions[0] = {1, 0, 0};
428 positions[1] = {1, 1, 0};
429 positions[2] = {0, 1, 0};
430 positions[3] = {0, 0, 0};
431 curves.nurbs_weights_for_write().fill(1.0f);
432 curves.nurbs_weights_for_write()[0] = 4.0f;
433 curves.tag_positions_changed();
435 {0.888889, 0.555556, 0}, {0.837792, 0.643703, 0}, {0.773885, 0.727176, 0},
436 {0.698961, 0.800967, 0}, {0.616125, 0.860409, 0}, {0.529412, 0.901961, 0},
437 {0.443152, 0.923773, 0}, {0.361289, 0.925835, 0}, {0.286853, 0.909695, 0},
438 {0.221722, 0.877894, 0}, {0.166667, 0.833333, 0}, {0.122106, 0.778278, 0},
439 {0.0903055, 0.713148, 0}, {0.0741654, 0.638711, 0}, {0.0762274, 0.556847, 0},
440 {0.0980392, 0.470588, 0}, {0.139591, 0.383875, 0}, {0.199032, 0.301039, 0},
441 {0.272824, 0.226114, 0}, {0.356297, 0.162208, 0}, {0.444444, 0.111111, 0},
442 {0.531911, 0.0731388, 0}, {0.612554, 0.0468976, 0}, {0.683378, 0.0301622, 0},
443 {0.74391, 0.0207962, 0}, {0.794872, 0.017094, 0}, {0.837411, 0.017839, 0},
444 {0.872706, 0.0222583, 0}, {0.901798, 0.0299677, 0}, {0.925515, 0.0409445, 0},
445 {0.944444, 0.0555556, 0}, {0.959056, 0.0744855, 0}, {0.970032, 0.0982019, 0},
446 {0.977742, 0.127294, 0}, {0.982161, 0.162589, 0}, {0.982906, 0.205128, 0},
447 {0.979204, 0.256091, 0}, {0.969838, 0.316622, 0}, {0.953102, 0.387446, 0},
448 {0.926861, 0.468089, 0},
450 evaluated_positions =
curves.evaluated_positions();
452 EXPECT_V3_NEAR(evaluated_positions[
i], result_3[
i], 1e-5f);
456TEST(curves_geometry, BezierGenericEvaluation)
460 curves.resolution_for_write().fill(8);
461 curves.offsets_for_write().last() = 3;
466 positions.
first() = {-1, 0, 0};
467 handles_right.
first() = {-1, 1, 0};
468 handles_left[1] = {0, 0, 0};
469 positions[1] = {1, 0, 0};
470 handles_right[1] = {2, 0, 0};
471 handles_left.
last() = {1, 1, 0};
472 positions.
last() = {2, 1, 0};
475 handles_left.
first() = {100, 100, 100};
476 handles_right.
last() = {100, 100, 100};
481 {-0.955078f, 0.287109f, 0.0f},
482 {-0.828125f, 0.421875f, 0.0f},
483 {-0.630859f, 0.439453f, 0.0f},
484 {-0.375f, 0.375f, 0.0f},
485 {-0.0722656f, 0.263672f, 0.0f},
486 {0.265625f, 0.140625f, 0.0f},
487 {0.626953f, 0.0410156f, 0.0f},
489 {1.28906f, 0.0429688f, 0.0f},
490 {1.4375f, 0.15625f, 0.0f},
491 {1.49219f, 0.316406f, 0.0f},
493 {1.50781f, 0.683594f, 0.0f},
494 {1.5625f, 0.84375f, 0.0f},
495 {1.71094f, 0.957031f, 0.0f},
499 EXPECT_V3_NEAR(evaluated_positions[
i], result_1[
i], 1e-5f);
525 EXPECT_NEAR(evaluated_radii[
i], result_2[
i], 1e-6f);