Об абстракции в математике

Feb 15, 2017 16:52

Давайте ненадолго представим себе что нам нужно дойти из точки n в точку m.
Взглянем на псевдокод

x0 = n
x1 = m

x = x0

for(step = 0; step < 1; step += 0.01)
x = x0 + (x1 - x0) * step

Что здесь происходит? Все понятно, мы стоим в исходной точке, и на каждом шаге сдвигаемся на некоторый процент пути вперед. Как я могу об этом сказать? Это видно из формулы. У нас есть отправная точка (x0), у нас есть расстояние между точками (x1 - x0) и у нас есть процент от этого расстояния (step). Все понятно, абстракция ясна.

А теперь давайте заменим тело цикла следующим

x = x0 * (1 - step) + x1 * step

ЭТО ЧТО БЛЯДЬ ЕЩЕ ТАКОЕ?

Спойлер: это та же самая формула.

Но давайте посмотрим о чем она нам говорит. Окей x0 * (1 - step) говорит нам что нужно отойти назад от той точки на которой мы стоим на шаг назад. Величина этого шага равна определенному проценту от расстояния до начальной точки. Едем дальше. + x1 * step говорит, что после этого, надо шагнуть вперед на величину равную определенному проценту от расстояния до конечной точки. То есть по факту мы делим эти два расстояния на одинаковое количество частей и каждый раз отрываем по кусочку от первого отрезка и приклеиваем к нему по кусочку от второго отрезка, и так до тех пор, пока второй отрезок целиком не заменит первый. Да, после этих рассуждений, становится понятно, что до конечной точки мы все таки дойдем, но формула напоминает своего рода челночный бег "сначала отступи на маленький шажок назад, потом сделай большой шаг вперед". Более того, при таком раскладе все еще не очевидно насколько же в конечном счете мы двигаемся вперед. А двигаемся вперед мы на разность шагов вперед и назад. Учитывая то, что оба отрезка мы поделили на равное количество частей, становится понятно, что двигаемся мы на величину равную расстоянию между точками поделенному на количество частей.

Мне кажется я знаю о чем вы думаете. Пожалуй вы думаете "ААААААА, БЛЯДЬ. ПОНЯЯЯТНО". Но уверен, что за этим спрашиваете "А по-проще никак нельзя было?" Так подумал и я, когда читал одну из статей на Хабре, в которой данная формула приводилась. И ведь статья приводилась в качестве обучающей. Но какой болезнью разума нужно страдать, чтобы думать что это
x = x0 * (1 - step) + x1 * step

Будет понятнее чем это?
x = x0 + (x1 - x0) * step

(Я хотел нарисовать к этому посту картинки, чтобы все было более наглядно, но как-то не срослось)
Previous post
Up