5template <
class Id,
int Dimensions,
typename Scalar = double,
6 typename StateSpace = Rn<Scalar, Dimensions>>
12 using point_t = Eigen::Matrix<Scalar, Dimensions, 1>;
13 using cref_t =
const Eigen::Ref<const Eigen::Matrix<Scalar, Dimensions, 1>> &;
14 using ref_t = Eigen::Ref<Eigen::Matrix<Scalar, Dimensions, 1>>;
20 const StateSpace &state_space = StateSpace())
21 : state_space(state_space) {
23 if constexpr (Dimensions == Eigen::Dynamic) {
24 assert(runtime_dimension > 0);
29 size_t size()
const {
return m_points.size(); }
34 std::size_t addNode = 0;
35 m_points.emplace_back(PointId{x,
id});
47 std::size_t maxPoints)
const {
49 std::priority_queue<DistanceId> max_heap;
51 for (
const auto &point : m_points) {
52 Scalar distance = state_space.distance(x, point.point);
53 if (max_heap.size() < maxPoints) {
54 max_heap.push({distance, point.id});
55 }
else if (distance < max_heap.top().distance) {
57 max_heap.push({distance, point.id});
61 std::vector<DistanceId> neighbors;
62 while (!max_heap.empty()) {
63 neighbors.push_back(max_heap.top());
67 std::reverse(neighbors.begin(), neighbors.end());
74 std::vector<DistanceId> out;
76 for (
auto &point : m_points) {
77 Scalar distance = state_space.distance(x, point.point);
78 if (distance < maxRadius) {
79 out.emplace_back(
DistanceId{distance, point.id});
87 double min_dist = std::numeric_limits<double>::max();
89 out.
distance = std::numeric_limits<double>::max();
90 for (
auto &point : m_points) {
91 Scalar distance = state_space.distance(x, point.point);
106 std::vector<PointId> m_points;
107 StateSpace state_space;
const Eigen::Ref< const Eigen::Matrix< Scalar, Dimensions, 1 > > & cref_t
Definition linear_nn.h:13
Id id_t
Definition linear_nn.h:11
LinearKNN(int runtime_dimension=-1, const StateSpace &state_space=StateSpace())
Definition linear_nn.h:19
size_t size() const
Definition linear_nn.h:29
int m_dimensions
Definition linear_nn.h:15
std::vector< DistanceId > searchKnn(const point_t &x, std::size_t maxPoints) const
Definition linear_nn.h:46
DistanceId searchNN(const point_t &x) const
Definition linear_nn.h:85
Eigen::Matrix< Scalar, Dimensions, 1 > point_t
Definition linear_nn.h:12
Eigen::Ref< Eigen::Matrix< Scalar, Dimensions, 1 > > ref_t
Definition linear_nn.h:14
std::vector< DistanceId > searchBall(const point_t &x, Scalar maxRadius) const
Definition linear_nn.h:72
void addPoint(const point_t &x, const Id &id, bool dummy)
Definition linear_nn.h:31
Scalar scalar_t
Definition linear_nn.h:10
StateSpace & getStateSpace()
Definition linear_nn.h:17
Definition dynotree_macros.h:9
Definition linear_nn.h:38
Scalar distance
Definition linear_nn.h:39
Id id
Definition linear_nn.h:40
bool operator<(const DistanceId &dp) const
Definition linear_nn.h:41