This work is one of the way to create a snake wave movement animation by DOP context (research a simulation of snake`s locomotion by dynamic tools of Houdini).
According to research snakes use synchronized muscle work for this movement and different body friction coefficients for forward movement, backward movement and sideways movement. Because how to simulate every muscle and flakes position is not clear for me so I have used a little trick with velocity (@v) to simulate fulcrums which the snake uses to move (you can see the fulcrums on the traces left by natural snake with this movement) exactly I removed negative value of @v.x and set to 0 sideways movement (@v.z) at these points. If I remove this external influence on velocity it is possible to watch why snake doesn`t use this method to move on flat and smooth surfaces (like glass). Forward movement (like others movement here) is calculated due to body bending only. The snake`s body is a chain of packed Convex Hall primitives with different constraints they are used like muscles. Two wave functions for horizontal and vertical movement direct of constraint work (is possible change speed, amplitude,period and other). Changing these parameters I can get something madness or reverse movement which is used for some snake robot or forward movement. Of course I have used packed primitives and it is very easy convert to spline IK animation with bones.
It is not so controlled way of animation like spline animation but it is allow to create more natural animation more quickly. It was a good experience!