summaryrefslogtreecommitdiff
path: root/include/newton_fit.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/newton_fit.h')
-rw-r--r--include/newton_fit.h117
1 files changed, 0 insertions, 117 deletions
diff --git a/include/newton_fit.h b/include/newton_fit.h
deleted file mode 100644
index b4db64c814..0000000000
--- a/include/newton_fit.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/* Copyright 2020 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-/* Newton's method for sphere fit algorithm */
-
-#ifndef __CROS_EC_NEWTON_FIT_H
-#define __CROS_EC_NEWTON_FIT_H
-
-#include "queue.h"
-#include "vec3.h"
-#include "stdbool.h"
-
-struct newton_fit_orientation {
- /** An orientations. */
- fpv3_t orientation;
-
- /** The number of samples of this orientation. */
- uint8_t nsamples;
-};
-
-struct newton_fit {
- /**
- * Threshold used to detect when two vectors are identical. Measured in
- * units^2.
- */
- fp_t nearness_threshold;
-
- /**
- * The weight to use for a new data point when computing the mean. When
- * a new point is considered the same as an existing orientation (via
- * the nearness_threshold) it will be averaged with the existing
- * orientation using this weight. Valid range is (0,1).
- */
- fp_t new_pt_weight;
-
- /**
- * The threshold used to determine whether or not to continue iterating
- * when performing the bias computation.
- */
- fp_t error_threshold;
-
- /**
- * The maximum number of orientations to use, changing this affects the
- * memory footprint of the algorithm as 3 floats are needed per
- * orientation.
- */
- uint32_t max_orientations;
-
- /**
- * The maximum number of iterations the algorithm is allowed to run.
- */
- uint32_t max_iterations;
-
- /**
- * The minimum number of samples per orientation to consider the
- * orientation ready for calculation
- */
- uint8_t min_orientation_samples;
-
- /**
- * Queue of newton_fit_orientation structs.
- */
- struct queue *orientations;
-};
-
-#define NEWTON_FIT(SIZE, NSAMPLES, NEAR_THRES, NEW_PT_WEIGHT, ERROR_THRESHOLD, \
- MAX_ITERATIONS) \
- ((struct newton_fit){ \
- .nearness_threshold = NEAR_THRES, \
- .new_pt_weight = NEW_PT_WEIGHT, \
- .error_threshold = ERROR_THRESHOLD, \
- .max_orientations = SIZE, \
- .max_iterations = MAX_ITERATIONS, \
- .min_orientation_samples = NSAMPLES, \
- .orientations = (struct queue *)&QUEUE_NULL( \
- SIZE, struct newton_fit_orientation), \
- })
-
-/**
- * Reset the newton_fit struct's state.
- *
- * @param fit Pointer to the struct.
- */
-void newton_fit_reset(struct newton_fit *fit);
-
-/**
- * Add new vector to the struct. The behavior of this depends on the
- * configuration values used when the struct was created. For example:
- * - Samples that are within sqrt(NEAR_THRES) of an existing orientation will
- * be averaged with the matching orientation entry.
- * - If the new sample isn't near an existing orientation it will only be added
- * if state->num_orientations < config->num_orientations.
- *
- * @param fit Pointer to the struct.
- * @param x The new samples' X component.
- * @param y The new samples' Y component.
- * @param z The new samples' Z component.
- * @return True if orientations are full and the struct is ready to compute the
- * bias.
- */
-bool newton_fit_accumulate(struct newton_fit *fit, fp_t x, fp_t y, fp_t z);
-
-/**
- * Compute the center/bias and optionally the radius represented by the current
- * struct.
- *
- * @param fit Pointer to the struct.
- * @param bias Pointer to the output bias (this is also the starting bias for
- * the algorithm.
- * @param radius Optional pointer to write the computed radius into. If NULL,
- * the calculation will be skipped.
- */
-void newton_fit_compute(struct newton_fit *fit, fpv3_t bias, fp_t *radius);
-
-#endif /* __CROS_EC_NEWTON_FIT_H */