31 const Eigen::MatrixXd& control_points,
33 double tension = 0.5);
42 const Eigen::MatrixXd& control_points,
52 const Eigen::MatrixXd& control_points,
63 const Eigen::MatrixXd& endpoints,
64 const Eigen::MatrixXd& tangents,
74 const Eigen::MatrixXd& control_points,
86 const Eigen::MatrixXd& control_points,
89 double tension = 0.5);
153 double tension = 0.5);
166 [[nodiscard]]
double tension()
const {
return m_tension; }
177 void evaluate_planar(
178 std::span<const double> control_points,
180 Eigen::Index num_samples,
181 std::vector<double>& out);
195 void reparameterize_planar(
196 std::span<const double>
points,
198 Eigen::Index point_count,
199 Eigen::Index num_samples,
200 std::vector<double>& out);
211 const Eigen::MatrixXd& control_points,
212 Eigen::Index num_samples,
213 Eigen::MatrixXd& out);
225 const Eigen::MatrixXd&
points,
226 Eigen::Index num_samples,
227 Eigen::MatrixXd& out);
234 Eigen::Index m_points_per_segment { 0 };
235 Eigen::Index m_overlap { 0 };
236 bool m_supports_multi {
false };
237 bool m_trigonometric {
false };
252 void rebuild_kernel();
254 const double* extend(
255 std::span<const double> control_points,
257 Eigen::Index&
count);
260 Eigen::Index num_samples,
261 Eigen::Index num_segments,
262 Eigen::Index active_count);
274 const Eigen::MatrixXd& control_points,
275 Eigen::Index num_samples,
277 double tension = 0.5);
300 const Eigen::MatrixXd&
points,
301 Eigen::Index num_samples);
313 Eigen::Index num_samples,
315 double tension = 0.5);
std::vector< glm::vec2 > * points
std::vector< double > m_tbuf
std::vector< double > m_planar
InterpolationMode mode() const
Currently configured mode.
std::vector< Eigen::Index > m_seg_total
std::vector< double > m_planar_alt
double tension() const
Currently configured tension.
std::vector< double > m_extended
std::vector< double > m_basis
std::vector< size_t > m_lower
std::vector< CurveChunk > m_chunks
std::vector< Eigen::Index > m_seg_first
std::vector< double > m_folded
std::vector< double > m_arc
std::vector< double > m_frac
Reusable interpolation state for callers evaluating many curves.
std::variant< std::vector< double >, std::vector< float >, std::vector< uint8_t >, std::vector< uint16_t >, std::vector< uint32_t >, std::vector< std::complex< float > >, std::vector< std::complex< double > >, std::vector< glm::vec2 >, std::vector< glm::vec3 >, std::vector< glm::vec4 >, std::vector< glm::mat4 > > DataVariant
Multi-type data storage for different precision needs.
double compute_arc_length(const Eigen::MatrixXd &points)
Compute arc length of curve using trapezoidal rule.
InterpolationMode
Mathematical interpolation methods.
Eigen::VectorXd bspline_cubic(const Eigen::MatrixXd &control_points, double t)
Uniform B-spline interpolation using Eigen matrices.
Eigen::VectorXd cubic_bezier(const Eigen::MatrixXd &control_points, double t)
Cubic Bezier interpolation using Eigen matrices.
Eigen::VectorXd quadratic_bezier(const Eigen::MatrixXd &control_points, double t)
Quadratic Bezier interpolation using Eigen matrices.
Eigen::VectorXd catmull_rom_spline(const Eigen::MatrixXd &control_points, double t, double tension)
Catmull-Rom spline interpolation using Eigen matrices.
Eigen::MatrixXd generate_interpolated_points(const Eigen::MatrixXd &control_points, Eigen::Index num_samples, InterpolationMode mode, double tension)
Generate interpolated points from control points.
Eigen::VectorXd compute_arc_length_table(const Eigen::MatrixXd &points)
Compute arc length parameterization table.
Kakshya::DataVariant interpolate_nddata(const Kakshya::DataVariant &control_points, Eigen::Index num_samples, InterpolationMode mode, double tension)
Process DataVariant through interpolation.
std::vector< Kakshya::LineVertex > reparameterize_by_arc_length(const std::vector< Kakshya::LineVertex > &path_vertices, size_t num_samples)
Resample path vertices for arc-length parameterization.
Eigen::VectorXd cubic_hermite(const Eigen::MatrixXd &endpoints, const Eigen::MatrixXd &tangents, double t)
Cubic Hermite interpolation using Eigen matrices.
Eigen::VectorXd interpolate(const Eigen::MatrixXd &control_points, double t, InterpolationMode mode, double tension)
Generic interpolation dispatcher.
Eigen::Index start_col
First control point of the owning segment.
Eigen::Index sample_count
Output sample count.
Eigen::Index sample_begin
First output sample.
bool clamp_t_high
Segment pinned to t = 1 by the control clamp.
Eigen::Index segment
Owning segment index.
A contiguous run of samples evaluated in one pass.