Отображение значений с плавающей точкой в ​​новое значение в указанном диапазоне в C ++ или Python

Я работаю с данными акселерометра, которые мне нужно «отобразить / преобразовать» в новый диапазон значений.

Итак, из приведенного ниже примера данных акселерометра:

X: [0.363209]
Y: [0.723211]
Z: [-9.806650]

Запустив мой скрипт на Python и отфильтровав максимальное и минимальное значения по всем 3 осям », я получил следующий диапазон значений:

LOWEST-X: -47.2172037037
HIGHEST-X: 45.4011574074
LOWEST-Y: -27.6039037037
HIGHEST-Y: 44.6747388889
LOWEST-Z: -49.03325
HIGHEST-Z: 43.3755673077

Я не уверен, что эти диапазоны являются исчерпывающими, так как я не мог найти документацию. Поэтому я полчаса швырял свой wiimote, пока цифры не перестали обновляться.

Мне нужно конвертировать Икс данные акселерометра в новое значение в диапазоне -От 0,22 до 0,22 и Y данные в значение в диапазоне -От 2,84 до 2,84.
Я попытался сделать это с помощью следующего кода:

.
.
.
k = self.map(twist.linear.y, -27.6039037037, 44.6747388889, -0.22, 0.22)

print "Testing Y conversion: " + str(k)

def map(self, x, in_min, in_max, out_min, out_max):
return round(float((x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min), 2)

Это немного изменено, карта функция копируется из Arduino реализация той же функции.

Тем не менее, отображение сопоставления не отражает желаемый -От 0,22 до 0,22 диапазон выходного сигнала при перемещении акселерометра. Ниже приведен пример вывода моего скрипта:

Testing Twist-Y: -2.17925555556  mapping to:    -0.07
Testing Twist-Y: 0.726418518519  mapping to:    -0.05
Testing Twist-Y: 1.45283703704   mapping to:    -0.04
Testing Twist-Y: 6.53776666667   mapping to:    -0.01
Testing Twist-Y: 8.71702222222   mapping to:    0.0
Testing Twist-Y: 10.1698592593   mapping to:    0.01
Testing Twist-Y: 3.26888333333   mapping to:    -0.03
Testing Twist-Y: -1.8160462963   mapping to:    -0.06
Testing Twist-Y: -4.35851111111  mapping to:    -0.08
Testing Twist-Y: -1.8160462963   mapping to:    -0.06
Testing Twist-Y: 3.99530185185   mapping to:    -0.03
Testing Twist-Y: 4.72172037037   mapping to:    -0.02
Testing Twist-Y: 6.90097592593   mapping to:    -0.01
Testing Twist-Y: 6.53776666667   mapping to:    -0.01
Testing Twist-Y: 0.726418518519  mapping to:    -0.05
Testing Twist-Y: 0.726418518519  mapping to:    -0.05
Testing Twist-Y: -2.17925555556  mapping to:    -0.07
Testing Twist-Y: 3.26888333333   mapping to:    -0.03
Testing Twist-Y: 9.44344074074   mapping to:    0.01
Testing Twist-Y: 11.259487037    mapping to:    0.02
Testing Twist-Y: 15.6179981481   mapping to:    0.04
Testing Twist-Y: 6.53776666667   mapping to:    -0.01
Testing Twist-Y: 1.8160462963    mapping to:    -0.04
Testing Twist-Y: 3.26888333333   mapping to:    -0.03
Testing Twist-Y: 7.9906037037    mapping to:    -0.0
Testing Twist-Y: 7.9906037037    mapping to:    -0.0
Testing Twist-Y: 6.90097592593   mapping to:    -0.01
Testing Twist-Y: 0.726418518519  mapping to:    -0.05
Testing Twist-Y: 3.99530185185   mapping to:    -0.03
Testing Twist-Y: 1.08962777778   mapping to:    -0.05
Testing Twist-Y: 0.726418518519  mapping to:    -0.05
Testing Twist-Y: -3.26888333333  mapping to:    -0.07
Testing Twist-Y: 5.08492962963   mapping to:    -0.02
Testing Twist-Y: -2.17925555556  mapping to:    -0.07
Testing Twist-Y: 10.5330685185   mapping to:    0.01
Testing Twist-Y: 2.90567407407   mapping to:    -0.03
Testing Twist-Y: 6.53776666667   mapping to:    -0.01
Testing Twist-Y: 6.90097592593   mapping to:    -0.01
Testing Twist-Y: -1.8160462963   mapping to:    -0.06
Testing Twist-Y: -6.53776666667  mapping to:    -0.09
Testing Twist-Y: 1.8160462963    mapping to:    -0.04
Testing Twist-Y: 7.26418518519   mapping to:    -0.01
Testing Twist-Y: 7.26418518519   mapping to:    -0.01
Testing Twist-Y: 0.0             mapping to:    -0.05
Testing Twist-Y: 1.45283703704   mapping to:    -0.04
Testing Twist-Y: -5.08492962963  mapping to:    -0.08
Testing Twist-Y: 0.363209259259  mapping to:    -0.05
Testing Twist-Y: 3.63209259259   mapping to:    -0.03
Testing Twist-Y: 1.8160462963    mapping to:    -0.04
Testing Twist-Y: 5.44813888889   mapping to:    -0.02
Testing Twist-Y: 10.8962777778   mapping to:    0.01
Testing Twist-Y: 5.08492962963   mapping to:    -0.02
Testing Twist-Y: 5.08492962963   mapping to:    -0.02
Testing Twist-Y: 3.26888333333   mapping to:    -0.03
Testing Twist-Y: 1.45283703704   mapping to:    -0.04
Testing Twist-Y: 3.26888333333   mapping to:    -0.03
Testing Twist-Y: 9.80665         mapping to:    0.01
Testing Twist-Y: 9.08023148148   mapping to:    0.0
Testing Twist-Y: 10.1698592593   mapping to:    0.01
Testing Twist-Y: 12.7123240741   mapping to:    0.03
Testing Twist-Y: 3.63209259259   mapping to:    -0.03
Testing Twist-Y: -1.8160462963   mapping to:    -0.06
Testing Twist-Y: -3.26888333333  mapping to:    -0.07
Testing Twist-Y: -1.08962777778  mapping to:    -0.06
Testing Twist-Y: 0.726418518519  mapping to:    -0.05
Testing Twist-Y: 2.17925555556   mapping to:    -0.04
Testing Twist-Y: 2.17925555556   mapping to:    -0.04
Testing Twist-Y: 2.17925555556   mapping to:    -0.04
Testing Twist-Y: 3.26888333333   mapping to:    -0.03
Testing Twist-Y: 7.26418518519   mapping to:    -0.01
Testing Twist-Y: 7.26418518519   mapping to:    -0.01
Testing Twist-Y: 7.26418518519   mapping to:    -0.01
Testing Twist-Y: 1.08962777778   mapping to:    -0.05
Testing Twist-Y: 0.0             mapping to:    -0.05
Testing Twist-Y: 2.90567407407   mapping to:    -0.03
Testing Twist-Y: 6.90097592593   mapping to:    -0.01
Testing Twist-Y: 7.9906037037    mapping to:    -0.0
Testing Twist-Y: 5.81134814815   mapping to:    -0.02
Testing Twist-Y: 7.26418518519   mapping to:    -0.01
Testing Twist-Y: 1.45283703704   mapping to:    -0.04
Testing Twist-Y: -0.726418518519 mapping to:    -0.06
Testing Twist-Y: 5.44813888889   mapping to:    -0.02
Testing Twist-Y: 10.5330685185   mapping to:    0.01
Testing Twist-Y: 9.80665         mapping to:    0.01
Testing Twist-Y: 10.1698592593   mapping to:    0.01
Testing Twist-Y: 1.45283703704   mapping to:    -0.04
Testing Twist-Y: 1.45283703704   mapping to:    -0.04
Testing Twist-Y: 5.44813888889   mapping to:    -0.02
Testing Twist-Y: 7.62739444444   mapping to:    -0.01
Testing Twist-Y: 10.1698592593   mapping to:    0.01
Testing Twist-Y: 9.08023148148   mapping to:    0.0
Testing Twist-Y: 5.81134814815   mapping to:    -0.02
Testing Twist-Y: 0.0             mapping to:    -0.05
Testing Twist-Y: 2.17925555556   mapping to:    -0.04
Testing Twist-Y: 13.4387425926   mapping to:    0.03
Testing Twist-Y: 10.5330685185   mapping to:    0.01
Testing Twist-Y: 13.0755333333   mapping to:    0.03
Testing Twist-Y: 4.72172037037   mapping to:    -0.02
Testing Twist-Y: 10.5330685185   mapping to:    0.01
Testing Twist-Y: 12.7123240741   mapping to:    0.03
Testing Twist-Y: 7.62739444444   mapping to:    -0.01
Testing Twist-Y: 9.44344074074   mapping to:    0.01
Testing Twist-Y: 9.44344074074   mapping to:    0.01
Testing Twist-Y: 1.45283703704   mapping to:    -0.04
Testing Twist-Y: 3.99530185185   mapping to:    -0.03
Testing Twist-Y: 2.54246481481   mapping to:    -0.04
Testing Twist-Y: 9.80665         mapping to:    0.01
Testing Twist-Y: 6.53776666667   mapping to:    -0.01
Testing Twist-Y: 6.17455740741   mapping to:    -0.01
Testing Twist-Y: 5.44813888889   mapping to:    -0.02
Testing Twist-Y: 7.26418518519   mapping to:    -0.01
Testing Twist-Y: 7.26418518519   mapping to:    -0.01
Testing Twist-Y: 9.08023148148   mapping to:    0.0
Testing Twist-Y: -1.08962777778  mapping to:    -0.06
Testing Twist-Y: -0.363209259259 mapping to:    -0.05
Testing Twist-Y: -0.363209259259 mapping to:    -0.05
Testing Twist-Y: 0.363209259259  mapping to:    -0.05
Testing Twist-Y: 1.8160462963    mapping to:    -0.04
Testing Twist-Y: 10.5330685185   mapping to:    0.01
Testing Twist-Y: 14.1651611111   mapping to:    0.03
Testing Twist-Y: 4.35851111111   mapping to:    -0.03
Testing Twist-Y: 4.72172037037   mapping to:    -0.02
Testing Twist-Y: 7.9906037037    mapping to:    -0.0
Testing Twist-Y: 9.44344074074   mapping to:    0.01
Testing Twist-Y: 7.62739444444   mapping to:    -0.01
Testing Twist-Y: 2.54246481481   mapping to:    -0.04
Testing Twist-Y: 5.44813888889   mapping to:    -0.02
Testing Twist-Y: 3.26888333333   mapping to:    -0.03
Testing Twist-Y: 2.90567407407   mapping to:    -0.03
Testing Twist-Y: 3.99530185185   mapping to:    -0.03
Testing Twist-Y: 2.17925555556   mapping to:    -0.04
Testing Twist-Y: 3.63209259259   mapping to:    -0.03
Testing Twist-Y: 5.81134814815   mapping to:    -0.02
Testing Twist-Y: 7.9906037037    mapping to:    -0.0
Testing Twist-Y: 6.17455740741   mapping to:    -0.01
Testing Twist-Y: 0.0             mapping to:    -0.05
Testing Twist-Y: -3.63209259259  mapping to:    -0.07
Testing Twist-Y: 4.35851111111   mapping to:    -0.03
Testing Twist-Y: 10.5330685185   mapping to:    0.01
Testing Twist-Y: 13.8019518519   mapping to:    0.03
Testing Twist-Y: 9.80665         mapping to:    0.01
Testing Twist-Y: 4.35851111111   mapping to:    -0.03
Testing Twist-Y: 3.26888333333   mapping to:    -0.03
Testing Twist-Y: 3.63209259259   mapping to:    -0.03
Testing Twist-Y: -1.08962777778  mapping to:    -0.06
Testing Twist-Y: -2.17925555556  mapping to:    -0.07
Testing Twist-Y: 7.62739444444   mapping to:    -0.01
Testing Twist-Y: 3.99530185185   mapping to:    -0.03
Testing Twist-Y: 3.99530185185   mapping to:    -0.03
Testing Twist-Y: 10.5330685185   mapping to:    0.01
Testing Twist-Y: 3.99530185185   mapping to:    -0.03
Testing Twist-Y: -5.08492962963  mapping to:    -0.08
Testing Twist-Y: 0.363209259259  mapping to:    -0.05
Testing Twist-Y: -1.8160462963   mapping to:    -0.06
Testing Twist-Y: -1.8160462963   mapping to:    -0.06
Testing Twist-Y: 1.8160462963    mapping to:    -0.04
Testing Twist-Y: 23.2453925926   mapping to:    0.09
Testing Twist-Y: 17.0708351852   mapping to:    0.05
Testing Twist-Y: 14.1651611111   mapping to:    0.03
Testing Twist-Y: 6.90097592593   mapping to:    -0.01
Testing Twist-Y: 4.72172037037   mapping to:    -0.02
Testing Twist-Y: 5.08492962963   mapping to:    -0.02
Testing Twist-Y: 8.35381296296   mapping to:    -0.0
Testing Twist-Y: 12.7123240741   mapping to:    0.03
Testing Twist-Y: 10.1698592593   mapping to:    0.01
Testing Twist-Y: 10.8962777778   mapping to:    0.01
Testing Twist-Y: 4.72172037037   mapping to:    -0.02
Testing Twist-Y: -2.90567407407  mapping to:    -0.07
Testing Twist-Y: -2.54246481481  mapping to:    -0.07
Testing Twist-Y: 10.5330685185   mapping to:    0.01
Testing Twist-Y: 7.26418518519   mapping to:    -0.01
Testing Twist-Y: 8.71702222222   mapping to:    0.0
Testing Twist-Y: 5.44813888889   mapping to:    -0.02
Testing Twist-Y: 1.45283703704   mapping to:    -0.04
Testing Twist-Y: 5.44813888889   mapping to:    -0.02
Testing Twist-Y: 5.44813888889   mapping to:    -0.02
Testing Twist-Y: 7.9906037037    mapping to:    -0.0
Testing Twist-Y: 5.81134814815   mapping to:    -0.02
Testing Twist-Y: 4.35851111111   mapping to:    -0.03
Testing Twist-Y: 4.72172037037   mapping to:    -0.02
Testing Twist-Y: 8.71702222222   mapping to:    0.0
Testing Twist-Y: 7.9906037037    mapping to:    -0.0

Я хотел бы точно настроить или исправить этот код, чтобы вывод лучше отражал желаемый диапазон.

-2

Решение

Предположим, что диапазон ввода xmin...xmaxи выходной диапазон xmin'...xmax', так

x'(xmin) = xmin'
x'(xmax) = xmax'

затем

x'  = xmin' + (x - xmin) * (xmax'-xmin') / (xmax-xmin) = xmin' + k * (x - xmin)

где

k = (xmax'-xmin') / (xmax-xmin)

Другой случай, если вам нужно зафиксировать значение в определенном интервале:

x'(x) = x, xmin < x < xmax
x'(x) = xmin,  x <= xmin
x'(x) = xmax,  x >= xmax

В этом случае вам нужно

newx = std::clamp(x, xmin, xmax); // since C++17

Или же

newx = std::max(xmin, std::min(x, xmax));
2

Другие решения

Преобразуется следующим образом, предполагая исходный диапазон от 0 до 1:

x * 4.4 - 2.2
y * 5.68 - 2.84

Преобразуется следующим образом, предполагая исходный диапазон от -1 до 1

x * 2.2
y * 2.84

Преобразуется следующим образом, предполагая исходный диапазон от a до b

(x - a) * 4.4 / (b - a) - 2.2
(y - a) * 5.68 / (b - a) - 2.84
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector