O
O
Oleg Ulyanov2017-01-11 18:05:36
JavaScript
Oleg Ulyanov, 2017-01-11 18:05:36

How to interpolate the reduction factor of a value?

Есть значения A и B. И есть начальный коэффициент уменьшения k, к примеру я беру его равным (A - B) / 100.
Есть кол-во шагов N, к примеру = 10;
Надо за N раз уменьшить/увеличить A = A - k до значения B, уменьшая k на каждом шаге.
Другими словами мне надо за N операций изменения значения(вычитание/сложения) добиться нужного значения, уменьшая размер вычитаемого/слагаемого (k).
Это мне нужно для задания линейного торможения вращения объекта.
Допустим надо изменить к примеру значение от 50 до 20 c начальным коэф-м уменьшения 10 за 5 итераций. Мне известны A=50 ,B=20, N=5, k0=10.
i k значение
1 10 50 - 10 = 40
2 8 40 - 8 = 32
3 6 32 - 6 = 26
4 4 22
5 2 20
Мне нужно формулу расчета k(i), i=1..N

Answer the question

In order to leave comments, you need to log in

3 answer(s)
Денис Загаевский, 2017-01-11
@zagayevskiy

Ну ведь можно использовать формулу суммы арифметической прогрессии. S = (a_1 + a_n)*n/2;
a_1 = A;
n = N;
S = B;
Выражайте a_n, затем считайте шаг прогрессии d = ((a_n - a_1) / n). Из шага прогрессии i-ый член вычисляется легко, из него вычитайте a_1, получите k на i-ом шаге.

U
uniquenicknqame, 2017-01-11
@uniquenicknqame

у вас, таки, ошибки/вопросы в математике:
1. (A - B) / 100 100, в данном случае и есть N (100, а не 10)
2. Нужно указать что значит N=0 тоесть A == B?
вобщем случае формула (с условностями-допущениями) выглядит примерно так:
k = (Math.abs(A - B) < Number.EPSILON) ? 0 : (A-B) / N;

X
x67, 2017-01-11
@x67

K=K+- (ba)*di, where di = 1/10 in this case, but in general this is an integration step. Only if there are more iterations than planned, then K will continue to fall linearly.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question