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