Program Listing for File discretizer.h
↰ Return to documentation for file (src/misc/discretizer.h)
#pragma once
#include <map>
#include <vector>
#include "tal/arrays.h"
#include "tal/vector3.h"
#include "tal/vector3i.h"
namespace sota {
using DiscreteVertex = Vector3i;
using Distance = float;
using DiscreteVertexToDistance = std::map<DiscreteVertex, Distance>;
using DiscreteVertexToNormals = std::map<DiscreteVertex, std::vector<Vector3*>>;
class VertexToNormalDiscretizer {
public:
VertexToNormalDiscretizer(float step) : _step(step) {}
static DiscreteVertex get_discrete_vertex(Vector3 v, float step);
void discretize(Vector3Array vertices, std::vector<Vector3>& normals) {
int size = vertices.size();
for (int i = 0; i < size; ++i) {
Vector3 v = vertices[i];
Vector3& n = normals[i];
auto p = get_discrete_vertex(v, _step);
_discretized[p].push_back(&n);
}
}
DiscreteVertexToNormals get() { return _discretized; }
private:
DiscreteVertexToNormals _discretized;
float _step;
};
} // namespace sota