Program Listing for File interpolation.hpp
↰ Return to documentation for file (src/navtk/utils/interpolation.hpp)
#pragma once
#include <memory>
#include <type_traits>
#include <typeinfo>
#include <navtk/aspn.hpp>
#include <navtk/not_null.hpp>
#include <navtk/tensors.hpp>
#include <navtk/utils/Ordered.hpp>
namespace navtk {
namespace utils {
template <typename T>
std::vector<Size> condition_source_data(std::vector<double> &time_source,
std::vector<T> &data_source,
std::vector<double> &time_interp);
std::pair<std::vector<Size>, std::vector<double>> linear_interpolate(
const std::vector<double> &time_source,
const std::vector<double> &data_source,
const std::vector<double> &time_interp);
std::pair<std::vector<Size>, std::vector<double>> quadratic_spline_interpolate(
const std::vector<double> &time_source,
const std::vector<double> &data_source,
const std::vector<double> &time_interp);
std::pair<std::vector<Size>, std::vector<double>> cubic_spline_interpolate(
const std::vector<double> &orig_time_source,
const std::vector<double> &data_source,
const std::vector<double> &orig_time_interp);
template <typename Y>
Y linear_interpolate(double x0, const Y &y0, double x1, const Y &y1, double x) {
if (x0 == x1) return y1;
double xpart = (x - x0) / (x1 - x0);
Y ypart = (y1 - y0) * xpart;
return y0 + ypart;
}
template <typename Y>
Y linear_interpolate(const aspn_xtensor::TypeTimestamp &x0,
const Y &y0,
const aspn_xtensor::TypeTimestamp &x1,
const Y &y1,
const aspn_xtensor::TypeTimestamp &x) {
if (x0 == x1) return y1;
double xpart = (double)(x.get_elapsed_nsec() - x0.get_elapsed_nsec()) /
(x1.get_elapsed_nsec() - x0.get_elapsed_nsec());
Y ypart = (y1 - y0) * xpart;
return y0 + ypart;
}
aspn_xtensor::MeasurementPositionVelocityAttitude linear_interp_pva(
const aspn_xtensor::MeasurementPositionVelocityAttitude &pva1,
const aspn_xtensor::MeasurementPositionVelocityAttitude &pva2,
const aspn_xtensor::TypeTimestamp &t);
not_null<std::shared_ptr<aspn_xtensor::MeasurementPositionVelocityAttitude>> linear_interp_pva(
navtk::not_null<std::shared_ptr<aspn_xtensor::MeasurementPositionVelocityAttitude>> pva1,
navtk::not_null<std::shared_ptr<aspn_xtensor::MeasurementPositionVelocityAttitude>> pva2,
const aspn_xtensor::TypeTimestamp &t);
aspn_xtensor::MeasurementPositionVelocityAttitude linear_extrapolate_pva(
const aspn_xtensor::MeasurementPositionVelocityAttitude &pva1,
const aspn_xtensor::MeasurementPositionVelocityAttitude &pva2,
const aspn_xtensor::TypeTimestamp &t);
not_null<std::shared_ptr<aspn_xtensor::MeasurementPositionVelocityAttitude>> linear_extrapolate_pva(
navtk::not_null<std::shared_ptr<aspn_xtensor::MeasurementPositionVelocityAttitude>> pva1,
navtk::not_null<std::shared_ptr<aspn_xtensor::MeasurementPositionVelocityAttitude>> pva2,
const aspn_xtensor::TypeTimestamp &t);
Vector3 linear_interp_rpy(const aspn_xtensor::TypeTimestamp &t1,
const Vector3 &rpy1,
const aspn_xtensor::TypeTimestamp &t2,
const Vector3 &rpy2,
const aspn_xtensor::TypeTimestamp &t);
Vector3 linear_extrapolate_rpy(const aspn_xtensor::TypeTimestamp &t1,
const Vector3 &rpy1,
const aspn_xtensor::TypeTimestamp &t2,
const Vector3 &rpy2,
const aspn_xtensor::TypeTimestamp &t);
} // namespace utils
} // namespace navtk