6#include "math/geometry/translation2d.h"
12T clamp(T value, T low, T high) {
13 return std::max(low, std::min(high, value));
29double lerp(
double a,
double b,
double t) {
30 return a * (1.0 - t) + b * t;
39double sign(
double x) {
46double wrap_angle_deg(
double input) {
47 double angle = fmod(input, 360);
54double wrap_angle_rad(
double input) {
55 double angle = fmod(input, M_TWOPI);
69double variance(std::vector<double>
const& values,
double mean) {
71 for (
int i = 0; i < values.size(); i++) {
72 total += (values[i] - mean) * (values[i] - mean);
74 return total / (values.size() - 1);
81double mean(std::vector<double>
const& values) {
83 for (
int i = 0; i < values.size(); i++) {
86 return total / (double)values.size();
97double covariance(std::vector<std::pair<double, double>>
const& points,
98 double meanx,
double meany) {
100 for (
int i = 0; i < points.size(); i++) {
101 covar += (points[i].first - meanx) * (points[i].second - meany);
110std::pair<double, double> calculate_linear_regression(
111 std::vector<std::pair<double, double>>
const& points) {
114 std::vector<double> xs(points.size(), 0.0);
115 std::vector<double> ys(points.size(), 0.0);
116 for (
int i = 0; i < points.size(); i++) {
117 xs[i] = points[i].first;
118 ys[i] = points[i].second;
121 double meanx = mean(xs);
122 double meany = mean(ys);
124 double slope = covariance(points, meanx, meany) / variance(xs, meanx);
125 double y_intercept = meany - slope * meanx;
127 return std::pair<double, double>(slope, y_intercept);
130double estimate_path_length(
const std::vector<Translation2d>& points) {
Definition translation2d.h:22
double distance(const Translation2d &other) const
Definition translation2d.cpp:79