Point-Along-Path Interpolation
Two closed Catmull–Rom splines are drawn as black paths on an SVG canvas, with four user-defined control points each. Clicking anywhere on the canvas adds a new runner—a blue circle—that continuously follows the nearest path using the SVG `getTotalLength` and `getPointAtLength` methods to interpolate its position along the curve. The runners’ motion is driven by a simple steering behavior simulation (velocity, acceleration, and force vectors), and each new runner is added to the dataset and rendered as a circle on click. The animation illustrates how points can be smoothly animated along arbitrary SVG paths, with the paths and circles updated dynamically in response to user interaction.
AI-generated descriptionThis example demonstrates how to use the getTotalLength and getPointAtLength methods on SVG path elements to interpolate a point along a Catmull–Rom spline.
A related technique is stroke dash interpolation.
forked from <a href='http://bl.ocks.org/mbostock/'>mbostock</a>'s block: <a href='http://bl.ocks.org/mbostock/1705868'>Point-Along-Path Interpolation</a>
forked from <a href='http://bl.ocks.org/antonyross/'>antonyross</a>'s block: <a href='http://bl.ocks.org/antonyross/da1e1bdb53cd9df07b0d7848835f2b9f'>Point-Along-Path Interpolation</a>
forked from <a href='http://bl.ocks.org/antonyross/'>antonyross</a>'s block: <a href='http://bl.ocks.org/antonyross/79c75e46b93860f74a7c29f3a190a8ca'>Point-Along-Path Interpolation</a>
forked from <a href='http://bl.ocks.org/antonyross/'>antonyross</a>'s block: <a href='http://bl.ocks.org/antonyross/fbc32c4d940260be137180b55ae6f428'>Point-Along-Path Interpolation</a>
forked from <a href='http://bl.ocks.org/antonyross/'>antonyross</a>'s block: <a href='http://bl.ocks.org/antonyross/77dff069d00125150b9dc73935e45c8c'>Point-Along-Path Interpolation</a>
forked from <a href='http://bl.ocks.org/antonyross/'>antonyross</a>'s block: <a href='http://bl.ocks.org/antonyross/407b6f72887521cf504558b58d7300dd'>Point-Along-Path Interpolation</a>
forked from <a href='http://bl.ocks.org/antonyross/'>antonyross</a>'s block: <a href='http://bl.ocks.org/antonyross/eb3fbb64145811ee8770436fdcea10c5'>Point-Along-Path Interpolation</a>
forked from <a href='http://bl.ocks.org/antonyross/'>antonyross</a>'s block: <a href='http://bl.ocks.org/antonyross/3c834ac2c55a9a86348d65c886d857f2'>Point-Along-Path Interpolation</a>
forked from <a href='http://bl.ocks.org/antonyross/'>antonyross</a>'s block: <a href='http://bl.ocks.org/antonyross/84468a5f4e918bd1e8551694f1215a78'>Point-Along-Path Interpolation</a>