33 {
34 int32_t cell_x =
x >> 15;
35 int32_t cell_y =
y >> 15;
36
38
39
40 for (int dy = -1; dy <= 1; ++dy) {
41 for (int dx = -1; dx <= 1; ++dx) {
42 int32_t gx = cell_x + dx;
43 int32_t gy = cell_y + dy;
44
45 int32_t fx, fy;
46 feature_point(gx, gy, fx, fy);
47
48 int32_t feature_x = (gx << 15) + fx;
49 int32_t feature_y = (gy << 15) + fy;
50
51 int32_t dx_q15 =
x - feature_x;
52 int32_t dy_q15 =
y - feature_y;
53
54
55
56 int32_t dist =
57 q15_abs(dx_q15) + q15_abs(dy_q15);
58
59 if (dist < min_dist)
60 min_dist = dist;
61 }
62 }
63
64
65 return (min_dist << 15) / (2 *
Q15_ONE);
66}
constexpr int32_t Q15_ONE