# Modelling a flexible strip

63 messages
1234
Open this post in threaded view
|

## Re: Modelling a flexible strip

 For the purpose of the Frenet sweep only, you may use:function subdivBezier3_2(p, n=4) =  n<=0 ?    [for(i=[0:len(p)-1])       i%3==0 ?         p[i] :        i%3==1 ?          (p[i]+(2*p[i-1]/3 + p[i+2]/3))/2 :          (p[i]+(p[i-2]/3 + 2*p[i+1]/3))/2 ]    :    let( seq = [for(i=[0:3:len(p)-4], s=_subdivB(p,i)) s ] )    subdivBezier3_2( concat( [ p[0] ], seq ), n-1);​It eliminates collinearities but its output will not be appropriate to BzEnergy() digestion.2017-12-27 14:23 GMT-02:00 Ronaldo Persiano :The result of subdivBezier3() is not a sequence of points in the curve. It is a sequence of control points of partial arcs of the incoming curve. So, just a third of its points are actually on the curve. You will have troubles computing Frenet frame for the sequence because there are many sub-sequences of 3 co-linear points in it. The sequence generated by subdivBezier3(bz,n) is a polygonal that approximates the curve. The greater the value of n the better is the approximation. The sequence length grows exponentially with n, though. It is faster to subdivide than to evaluate an equal number of points points in the curve and the convergence rate is better.2017-12-27 13:52 GMT-02:00 nop head :Yes there is an erroneous 2 in my code but the output I posted was correct.The confusing thing is you draw the Bezier curve with the results from subdivBezier3 but its output isn't a Bezier curve. To speed up drawing I passed it to my Frenet sweep and it choked. _______________________________________________ OpenSCAD mailing list [hidden email] http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org
Open this post in threaded view
|

## Re: Modelling a flexible strip

 In reply to this post by nophead As I have supposed the instability was produced by BestBz(). I had to tighten the stopping clause in _bestS to get a better stability. I can't assure this method is foolproof; it may go wild when the tangent directions and endpoints induce a loop or inflexions to the arc. Besides, to avoid stack overflow I limited arbitrarily the maximum number of recursions calls.function _bestS(bz, l, s1, s2, e1, e2, eps=1e-3, n=15) =  let( s12 = (s1+s2)/2,       e12 = BalancedEnergy(bz, s12, l, eps),       s3  = max(min(parabMin(s1,s12,s2,e1,e12,e2),1-eps),eps),       e3 = BalancedEnergy(bz, s3, l, eps) )  //echo(s1=s1,s3=s3,s12=s12,s2=s2,e1=e1,e3=e3,e12=e12,e2=e2,n=n)  (abs(e3-e12)/e12