6fd9bdf2 |
1 | puts "========" |
2 | puts "0030645: Modeling Algorithms - B-spline segmentation produces wrong parametrization" |
3 | puts "========" |
4 | puts "" |
5 | |
6 | bsplinecurve result 3 4 \ |
7 | 2.0 4 2.5 2 2.9 2 3.0 4 \ |
8 | 117.9 0.0 11.6 1 \ |
9 | 116.7 0.0 11 1 \ |
10 | 115.8 0.0 10.5 1 \ |
11 | 114.4 0.0 9.7 1 \ |
12 | 113.9 0.0 9.4 1 \ |
13 | 113.3 0.0 9.1 1 \ |
14 | 113.1 0.0 9.0 1 \ |
15 | 113.0 0.0 8.9 1 |
16 | |
17 | |
18 | set tolerance 2.e-9 |
19 | segment result 2.5 2.900000001 $tolerance |
20 | |
21 | set crv [dump result] |
22 | |
23 | regexp {Knots +:\n(.*)} $crv full knots |
24 | set is_different_knots 1 |
25 | set knots_list {} |
26 | while { "$knots" != "\n" && $is_different_knots } { |
27 | regexp { +([0-9]+) +: +([-0-9.+eE]+) *([0-9]+)\n(.*)} $knots full index knot weight rest |
28 | foreach k $knots_list { |
29 | if { [expr abs($k - $knot)] < $tolerance } { |
30 | set is_different_knots 0 |
31 | } |
32 | } |
33 | |
34 | lappend knots_list $knot |
35 | set knots $rest |
36 | } |
37 | |
38 | if { $is_different_knots } { |
39 | puts "OK: all knots are different" |
40 | } else { |
41 | puts "ERROR: segment has knots too close" |
42 | } |