For example, if you have drawn your trajectory with curve() segments you can interpolate along the curve with curvePoint() and a parameter t that is between 0 and 1 and that you increase stepwise. The same is also possible with Bezier curves. See Processing reference for those methods. So for small step widths of t, you should obtain a smooth motion.
One problem is to know the length of the curve segment, so that the step width of t can be adjusted accordingly. Of course, this depends on the parameters that were chosen for the curve. Unfortunately, I don't know a method for the curve() and bezier() implementations that returns this length.
Another problem is that you may have multiple segments of varying length on your map; then you should interpolate of course on the whole trajectory, but calculate the t values for each segment individually. As long we don't have a good estimate for the length, this might be a tricky business. (Of course there is always the option to vary t slowly and to approximate the length by summing up the distances between the current and the previous position; but this is cumbersome. Anyway, in the Processing implementation of the Catmull-Rom and Bezier splines, the functional form is known, so it should be possible for Processing to do integration internally.)
Click the map and type key n, then you will see all possible paths stored with the map. You see that the path segments are straight lines and have different lengths. Type n again to hide them.
Then choose a topic at the left (for example "Ab initio Methods"), then click the sign post button. The shortest path to the highlighted shelf with this topic is calculated (from the entrance) using Dijkstra's algorithm and displayed. If there is change of direction, a curve is interpolated instead of an edge. The path is interpolated with steps as described above (using an assumed step width of 60 cm in real world), segment-wise. That's why some segments show higher density than others.