The importance of transition curves

Imagine a car, moving with constant magnitude of velocity, whose path is 0- 1 -2 -3. The friction it experiences from rolling and air are exactly balanced by a motor driving it forward.

Between 1 and 2 it experiences a centripetal force always towards a centre C and again of constant magnitude. It might be provided by rails ( like a train), or friction on wheels, or even a rope!

However, a car ( and its passengers) behaves like a mass on a spring operating in a frictional environment. For it, there is a sudden outward centrifugal force. Applying a sudden force is going to make it head radially outwards to a new equilibrium distance, but it will overshoot. It then returns but not back to the original radius, and the oscillations die away.

In a car, the suspension system of springs and dampers should be set to 'dead beat', ie it will only overshoot slightly and then settle to the new steady position. Worn shock absorbers mean this doesn't happen, and you may get one or more reversals before the steady state.

For a passenger sitting IN the car there is no effective damping, and their body/head will undergo a nomber of oscillations.

When the curve section ends, the return to zero centripetal force makes the same effect in the reverse direction.

Part of the reason many fairground rides are so exciting is that sudden accelerations of your head and the part of the ear that senses motion produce disturbing mental effects, all the way up to violent sickness!

However, more practically important, if you run a train down rails that suddenly go from straight to a fixed radius curve, it will only stay on the rails if they can supply the necessary inward radial force- otherwise it will jump the rails. Or for a car, where the situation is less severe since you 'feed in' a steering deflection smoothly rather than suddenly- but the skid can still happen and you slide off the curved section if friction is not enough.

Engineers solve this disaster situation by feathering the transition from straight to curved with a 'transition curve'. See my earlier post of examples of such curves, Cornu spirals, etc on the LB Board. Much of the code is re-used from there.

LB demonstration of the effect.

Once you realise that, in the frame of reference of the vehicle the radial motion is independent of the forward motion, so you can work them out independently of each other. Feel free to experiment with any or all of the variables.

Here I've sketched what your head moves like! I should really add this resultant position to my graphic screens..

LB Code

Note- this is just one of several versions I've played with,,,

    '   Transition curve- why they are needed!!!

    '   This is the trail left by a turtle which takes steps of a fixed size.
    '       Starts at fixed velocity and no acceleration force.
    '       After 100 steps a force is applied perpendicular to current travel direction.
    '           so now d( curvature) /dt =k

    '   NB LB's turtle steps and angles are internally integers. So here I use my own turtle routines.


    WindowWidth  =950
    WindowHeight =600

    graphicbox #w.g1  10,  10, 500, 500
    graphicbox #w.g2 520,  10, 400, 200
    graphicbox #w.g3 520, 310, 400, 200

    open "Transition curves- why they are needed!!" for window as #w

    #w   "trapclose quit"

    #w.g1 "down ; size 2 ; fill 170 170 90 ; flush"
    #w.g2 "down ; size 1 ; fill 170 170 90 ; flush"
    #w.g3 "down ; size 1 ; fill 170 170 90 ; flush"

    global  pi,                     TX,         TY,         Ttheta
            pi =4 *atn( 1):         TX = 40:    TY =200:    Ttheta =315
            '   turtle starts at TX, TY, pointing North

    f       = 0.0000                    '   angle turned at each iteration
    st      = 0.02                      '   step size per iteration

    'Initial vehicle conditions
    'x           =  10                  '   initial horizontal position.
    't                                  '   initial time.
    dt          =   0.1                 '   time interval between updates.
    mass        =   1e3                 '   mass of moving vehicle.
    k           =    10

    R           = 0                     '   radius of curved path
    'xC =: yC =  '   coordinated of centre point.

    #w.g1 "down"

    for t =0 to 2.5e3 step dt
        call turn f
        if f =0    and t > 400 then f =0.01 : cForce =1e2:   #w.g1 "color green "  '   centripetal force acting
        if f =0.01 and t >1700 then f =0    : cForce =0  :   #w.g1 "color red   "  '    no central force acting

        if R =0 then
            R  = 80
            xC =180
            yC =220
        end if

        call forward st
        #w.g1 "line "; TX; " "; TY; " "; TX +dx; " "; TY +dy

        #w.g2 "set "; int( 10 +t /2.5e3 *360); " "; 100 +f *4e3

    '   Can find radial distance and centre from curvature and original angle..
    '       and from centrifugal force =v^2 /radius.
    '   Net force towards this centre from .
    '       force =centriForce -k *displacement radially  with k =spring constant.
    '   Add air drag prop'l v^2.
    '       if vx >0 then force =force -( vx^2 /100) else force =force +( vx^2 /100)
    '   print x, vx, accnx
       accnx   =( cForce -k *x -100 *vx^2 *sgn( vx)) /mass
       vx      =vx +accnx *dt
       x       =x     +vx *dt

        #w.g3 "set "; int( 10 +t /2.5e3 *360); " "; int( 10 +( R +5 *x))

    next t

    #w.g1 "flush"


    sub turn angle  '   increment/update global turtle direction ( in DEGREES)
        Ttheta =( Ttheta +angle) 'mod 360
    end sub

    sub forward s
        dx  =s *cosRad( Ttheta)
        dy  =s *sinRad( Ttheta)
        TX  =TX +dx
        TY  =TY +dy
    end sub

    function sgn( j)
        if j <0 then sgn =-1 else sgn =1
    end function

    function sinRad( a)
        sinRad =sin( a *pi /180)
    end function

    function cosRad( a)
        cosRad =cos( a *pi /180)
    end function

    function co$( I)
        r   =int( 128 +127 *sin( I / 330000))
        g   =int( 128 +127 *sin( I / 170000))
        b   =int( 128 +127 *sin( I / 070000))
        co$ =str$( r) +" " +str$( g) +" " +str$( b)
    end function

    sub quit h$
        close #h$
    end sub