public Point2D getPointAt( double position ) {
		if( position < 0 || position > 1 ) {
			throw new IllegalArgumentException( "position out of range: " + position );
		}

		int segment = segmentAt( position );
		double delta = position * totalLength - segmentLengthsSum[segment];
		delta /= segmentLengths[segment];

		Point2D start = segments[segment];
		Point2D end = segments[segment + 1];

		double x = start.getX() + delta * (end.getX() - start.getX());
		double y = start.getY() + delta * (end.getY() - start.getY());

		return new Point2D.Double( x, y );
	}