26 : x_buckets_(0), y_buckets_(0), theta_buckets_(0) {
61 for (
int f = 0; f < num_features; ++f)
71 for (
int f = 0; f < num_features; ++f)
73 sorted_features->
sort();
82 for (
int theta = 0; theta <= UINT8_MAX && index < 0; ++theta) {
83 feature.
Theta = theta;
84 index =
Index(feature);
87 tprintf(
"(%d,%d) does not exist in feature space!\n", x, y);
91 tprintf(
"Click at (%d, %d) ->(%d, %d), ->(%d, %d)\n",
92 x, y, feature.
X, feature.
Y, x - feature.
X, y - feature.
Y);
96 if (x != 0 || y != 0) {
97 double angle = atan2(static_cast<double>(y), static_cast<double>(x)) + M_PI;
99 feature.
Theta =
static_cast<uint8_t
>(angle + 0.5);
100 index =
Index(feature);
102 tprintf(
"Feature failed to map to a valid index:");
const int kIntFeatureExtent
INT_FEATURE_STRUCT PositionFromBuckets(int x, int y, int theta) const
void Init(uint8_t xbuckets, uint8_t ybuckets, uint8_t thetabuckets)
DLLSYM void tprintf(const char *format,...)
bool Serialize(FILE *fp) const
int Index(const INT_FEATURE_STRUCT &f) const
int DivRounded(int a, int b)
void IndexAndSortFeatures(const INT_FEATURE_STRUCT *features, int num_features, GenericVector< int > *sorted_features) const
INT_FEATURE_STRUCT PositionFromIndex(int index) const
void IndexFeatures(const INT_FEATURE_STRUCT *features, int num_features, GenericVector< int > *mapped_features) const
int XYToFeatureIndex(int x, int y) const