FOUND
Loading...
Searching...
No Matches
distance.hpp
1#ifndef SRC_DISTANCE_DISTANCE_HPP_
2#define SRC_DISTANCE_DISTANCE_HPP_
3
4#include <utility>
5#include <memory>
6
7#include "common/style.hpp"
8#include "common/pipeline/stages.hpp"
9#include "common/spatial/attitude-utils.hpp"
10#include "common/spatial/camera.hpp"
11
12namespace found {
13
23class DistanceDeterminationAlgorithm : public FunctionStage<Points, PositionVector> {
24 public:
25 // Constructs this
27 // Destroys this
29};
30
38 public:
47 SphericalDistanceDeterminationAlgorithm(decimal radius, Camera &&cam) : cam_(cam), radius_(radius) {}
49
64 PositionVector Run(const Points &p) override;
65
66 protected:
80 Vec3 getCenter(const Vec3 &a, const Vec3 &b, const Vec3 &c);
81
99 PositionVector Run(const Vec3 &a, const Vec3 &b, const Vec3 &c);
100
105
109 decimal radius_;
110
115
119 decimal r_;
120};
121
154 public:
179 Camera &&cam,
180 size_t minimumIterations,
181 size_t maximumRefreshes,
182 decimal distanceRatio,
183 decimal discriminatorRatio,
184 int pdfOrder,
185 int radiusLossOrder);
187
209 PositionVector Run(const Points &p) override;
210
211 private:
227 decimal GenerateLoss(PositionVector &position,
228 decimal targetDistanceSq,
229 std::unique_ptr<Vec3[]> &projectedPoints,
230 size_t size);
231
264 PositionVector ShuffledCall(std::unique_ptr<Vec3[]> &source, size_t n, std::unique_ptr<uint64_t[]> &logits);
265
274 inline uint64_t Pow(uint64_t base, uint64_t power) {
275 uint64_t result = 1;
276 while (power > 0) {
277 if (power % 2 == 1)
278 result *= base;
279 base *= base;
280 power /= 2;
281 }
282 return result;
283 }
284
294 uint64_t pdfOrder_;
297};
298
306 public:
314
323 PositionVector Run(const Points &p) override;
324 private:
325 // Fields specific to this algorithm, and helper methods
326};
327
328} // namespace found
329
330#endif // SRC_DISTANCE_DISTANCE_HPP_
A Camera is a mutable object that represents a Camera.
Definition camera.hpp:22
The DistanceDeterminationAlgorithm class houses the Distance Determination Algorithm.
Definition distance.hpp:23
The DistanceDeterminationAlgorithm class houses the Distance Determination Algorithm.
Definition distance.hpp:305
PositionVector Run(const Points &p) override
Place documentation here.
EllipticDistanceDeterminationAlgorithm(PositionVector radius)
Initializes an EllipticDistanceDeterminationAlgorithm.
A FunctionStage is a data structure that wraps a function, and taking in parameter Input and returnin...
Definition stages.hpp:56
The IterativeSphericalDistanceDeterminationAlgorithm is a variation of the SphericalDistanceDetermina...
Definition distance.hpp:153
size_t minimumIterations_
The minimum number of iterations to use.
Definition distance.hpp:286
PositionVector Run(const Points &p) override
Obtains the position of the planet relative to the camera.
Definition distance.cpp:112
size_t maximumRefreshes_
The maximum number of times to refresh the reference position.
Definition distance.hpp:288
uint64_t pdfOrder_
The Shuffle randomization order.
Definition distance.hpp:294
decimal distanceRatioSq_
The maximum distance ratio to accept.
Definition distance.hpp:290
decimal discriminatorRatio_
The maximum loss ratio to accept.
Definition distance.hpp:292
uint64_t radiusLossOrder_
The Loss Radius error order.
Definition distance.hpp:296
uint64_t Pow(uint64_t base, uint64_t power)
Performs exponentiation for uint64_t.
Definition distance.hpp:274
PositionVector ShuffledCall(std::unique_ptr< Vec3[]> &source, size_t n, std::unique_ptr< uint64_t[]> &logits)
Calls SphericalDistanceDeterminationAlgorithm::Run with randomized triplets of indicies from source.
Definition distance.cpp:191
decimal GenerateLoss(PositionVector &position, decimal targetDistanceSq, std::unique_ptr< Vec3[]> &projectedPoints, size_t size)
Generates a loss on a position vector.
Definition distance.cpp:169
The DistanceDeterminationAlgorithm class houses the Distance Determination Algorithm.
Definition distance.hpp:37
decimal radius_
radius_ field instance describes the defined radius of earth.
Definition distance.hpp:109
Camera cam_
cam_ field instance describes the camera settings used for the photo taken
Definition distance.hpp:104
Vec3 center_
Calculated center vector.
Definition distance.hpp:114
decimal r_
Calculated radius.
Definition distance.hpp:119
Vec3 getCenter(const Vec3 &a, const Vec3 &b, const Vec3 &c)
Returns the center of earth as a 3d Vector.
Definition distance.cpp:43
SphericalDistanceDeterminationAlgorithm(decimal radius, Camera &&cam)
Creates a SphericalDeterminationAlgorithm, which deduces the Position vector of a sattelite from Eart...
Definition distance.hpp:47
PositionVector Run(const Points &p) override
Obtains the position of the planet relative to the camera.
Definition distance.cpp:19
A Vec3 is a mutable object that represents a 3D Vector.
Definition attitude-utils.hpp:98