puts "========" puts "0030645: Modeling Algorithms - B-spline segmentation produces wrong parametrization" puts "========" puts "" 2dbsplinecurve result 3 4 \ 2.0 4 2.5 2 2.9 2 3.0 4 \ 117.9 11.6 1 \ 116.7 11 1 \ 115.8 10.5 1 \ 114.4 9.7 1 \ 113.9 9.4 1 \ 113.3 9.1 1 \ 113.1 9.0 1 \ 113.0 8.9 1 set tolerance 1.e-9 segment result 2.5 2.900000000001 $tolerance set crv [dump result] regexp {Knots +:\n(.*)} $crv full knots set is_different_knots 1 set knots_list {} while { "$knots" != "\n" && $is_different_knots } { regexp { +([0-9]+) +: +([-0-9.+eE]+) *([0-9]+)\n(.*)} $knots full index knot weight rest puts $knot puts $rest foreach k $knots_list { if { [expr abs($k - $knot)] < $tolerance } { set is_different_knots 0 } } lappend knots_list $knot set knots $rest } if { $is_different_knots } { puts "OK: all knots are different" } else { puts "ERROR: segment has knots too close" }