MayaFlux 0.5.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ reparameterize()

void MayaFlux::Kinesis::CurveEvaluator::reparameterize ( const Eigen::MatrixXd &  points,
Eigen::Index  num_samples,
Eigen::MatrixXd &  out 
)

Resample a polyline to uniform arc length into a caller-owned matrix.

Parameters
pointsMxN matrix, columns are sequential points.
num_samplesOutput column count, at least 2.
outResized to rows(points) x num_samples and overwritten.

Boundary overload. Transposes in, wraps reparameterize_planar, transposes out.

Definition at line 839 of file MotionCurves.cpp.

843{
844 const auto dim = static_cast<size_t>(points.rows());
845 const auto n = static_cast<size_t>(points.cols());
846
847 m_planar.resize(dim * n);
848 const double* src = points.data();
849
850 for (size_t d = 0; d < dim; ++d) {
851 double* row = m_planar.data() + d * n;
852 for (size_t i = 0; i < n; ++i) {
853 row[i] = src[d + i * dim];
854 }
855 }
856
857 reparameterize_planar(m_planar, dim, points.cols(), num_samples, m_planar_alt);
858
859 const auto samples = m_planar_alt.size() / std::max<size_t>(dim, 1);
860 out.resize(points.rows(), static_cast<Eigen::Index>(samples));
861
862 double* dst = out.data();
863 for (size_t d = 0; d < dim; ++d) {
864 const double* row = m_planar_alt.data() + d * samples;
865 for (size_t i = 0; i < samples; ++i) {
866 dst[d + i * dim] = row[i];
867 }
868 }
869}
std::vector< glm::vec2 > * points
std::vector< double > m_planar_alt
void reparameterize_planar(std::span< const double > points, size_t dim, Eigen::Index point_count, Eigen::Index num_samples, std::vector< double > &out)
Resample a polyline to uniform arc length, coordinate-major.

References points.

Referenced by MayaFlux::Kinesis::reparameterize_by_arc_length().

+ Here is the caller graph for this function: