diff options
| author | a1xd <[email protected]> | 2021-04-13 23:59:21 -0400 |
|---|---|---|
| committer | a1xd <[email protected]> | 2021-04-13 23:59:21 -0400 |
| commit | a6926be0e911b7b7637861866f41c3bca31a87a3 (patch) | |
| tree | a8d7cd5afb4c093e6f97e8d772b139dd5d749988 /common/accel-lookup.hpp | |
| parent | additional fixes (diff) | |
| download | rawaccel-a6926be0e911b7b7637861866f41c3bca31a87a3.tar.xz rawaccel-a6926be0e911b7b7637861866f41c3bca31a87a3.zip | |
move arbitrary input into settings
separate arbitrary mode from spaced modes, arbitrary now deserializes from default settings file
Diffstat (limited to 'common/accel-lookup.hpp')
| -rw-r--r-- | common/accel-lookup.hpp | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/common/accel-lookup.hpp b/common/accel-lookup.hpp index 968eb6a..4e8354f 100644 --- a/common/accel-lookup.hpp +++ b/common/accel-lookup.hpp @@ -97,7 +97,7 @@ namespace rawaccel { return y; } - linear_lut(const table_args& args) : + linear_lut(const spaced_lut_args& args) : range({ args.start, args.stop, @@ -106,7 +106,7 @@ namespace rawaccel { transfer(args.transfer) {} linear_lut(const accel_args& args) : - linear_lut(args.lut_args) {} + linear_lut(args.spaced_args) {} }; struct binlog_lut : lut_base<binlog_lut> { @@ -138,7 +138,7 @@ namespace rawaccel { return y; } - binlog_lut(const table_args& args) : + binlog_lut(const spaced_lut_args& args) : range({ static_cast<int>(args.start), static_cast<int>(args.stop), @@ -148,7 +148,7 @@ namespace rawaccel { transfer(args.transfer) {} binlog_lut(const accel_args& args) : - binlog_lut(args.lut_args) {} + binlog_lut(args.spaced_args) {} }; struct si_pair { @@ -162,12 +162,10 @@ namespace rawaccel { }; struct arbitrary_lut { - enum { capacity = SPACED_LUT_CAPACITY / 4 }; + enum { capacity = ARB_LUT_CAPACITY }; fp_rep_range range; -; arbitrary_lut_point data[capacity] = {}; - float raw_data_in[capacity*2] = {}; int log_lookup[capacity] = {}; double first_point_speed; double last_point_speed; @@ -175,6 +173,7 @@ namespace rawaccel { int last_log_lookup_index; double last_log_lookup_speed; double first_log_lookup_speed; + bool velocity_points; double operator()(double speed) const { @@ -205,6 +204,7 @@ namespace rawaccel { int log_index = get_log_index(speed); if (unsigned(log_index) >= capacity) return 1; int arbitrary_index = log_lookup[log_index]; + if (arbitrary_index < 0) return 1; index = search_from(arbitrary_index, last_arb_index, speed); } @@ -238,12 +238,19 @@ namespace rawaccel { double inline apply(int index, double speed) const { - si_pair pair = data[index].slope_intercept; - return pair.slope + pair.intercept / speed; - } + auto [slope, intercept] = data[index].slope_intercept; + if (velocity_points) + { + return slope + intercept / speed; + } + else + { + return slope * speed + intercept; + } + } - void fill(vec2<float>* points, int length) + void fill(const vec2<float>* points, int length) { first_point_speed = points[0].x; last_arbitrary_index = length - 1; @@ -268,8 +275,6 @@ namespace rawaccel { for (int i = 0; i < length; i++) { next = points[i]; - raw_data_in[i * 2] = next.x; - raw_data_in[i * 2 + 1] = next.y; double slope = (next.y - current.y) / (next.x - current.x); double intercept = next.y - slope * next.x; si_pair current_si = { @@ -295,8 +300,10 @@ namespace rawaccel { } } - arbitrary_lut(const accel_args&) + arbitrary_lut(const accel_args& args) { + velocity_points = args.arb_args.velocity; + fill(args.arb_args.data, args.arb_args.length); } }; } |