В блогах была пара замечательных записей, но к сожалению там что-то произошло с изображениями.
Ну, вот нашёл что-то интересное по тригонометрии.
http://ege-study.ru/materialy-ege/tr...icheskij-krug/

Векторную алгебру можно на пальцах объяснить.
В ней действует элементарная теорема пифагора.
Допустим, есть у нас 2 точки - (2,4) и (6, 6)
Расстояние от одной точки до другой?
Запросто.
Давайте нарисуем на координатной плоскости эти две точки.(да, да, возьмите лист бумаги и нарисуйте, вы)
Как нам получить расстояние между этими двумя точками?
Всё просто, рисуем от первой точки (2,4) до (6, 4) линию, и далее ведём её из этой точки ко второй точке.
Мы получили сдвиг по иксу и сдвиг по игрику. Далее - дельтаИкс и дельтаИгрик.
Далее всё ещё проще. Вспоминаем теорему Пифагора.
Мы можем представить наши дельтуИкс и дельтуИгрик как катеты прямоугольного треугольника, и расстояние от одной точки до второй будет гипотенузой.
Гипотенуза = корень из(катет1*катет1 + катет2*катет2);
Расстояние между двумя точками равно
корень из(дельтаИкс*дельтаИкс + дельтаИгрик*дельтаИгрик);
В школе вы должны были встречаться с формулой c^2 = a^2 + b^2;
где ^ - возведение в степень. Именно исходя из этой формулы и исчисляется расстояние между двумя точками.
Так вот, вектор, который был прибавлен к первой точке, чтобы получить вторую равен разнице векторов (6-2, 6-4)=(4,2)
Это должно быть понятно, прибавив к (2, 4) вектор (4,2) получаем (6,6)
если мы к (6,6) прибавим (4,2) ещё раз, то направление движения не изменится, появится третья точка (6+4, 6+2) = (10, 8)
Расстояние между первыми двумя точками будет равным расстоянию от второй до третьей. Все три точки будут на одной линии.
Сколько не прибавляй к последней точке вектор (4,2) всё равно будет на одной линии каждая новая точка с остальными.
То же и с отрицательными векторами.
Длина вектора(расстояние между точками, или пройденный путь объекта) равна как раз корень из (4*4+2*2)=кореньиз(20)
Нормаль - это вектор, длина которого равна единице.
Тоесть, направление нормали может совпадать с направлением вектора, но она равна единице, а это значит, что путь, который проходит объект за одно прибавление вектора равен 1 пикселу.
Для чего нужны нормали? Нормаль можно умножить на любое число и длина нормали станет этим числом.
Из вектора можно сделать нормаль. Формулы, по которым можно это сделать можно найти в интернете. Введите в поисковик "нормализация вектора".
Метод normalize класса Point делает дополнительную работу - он нормализирует вектор и сразу устанавливает его длину в передаваемый аргумент.
Чтобы получить нормаль из любого вектора используем speed.normalize(1)
Прошу обратить внимание,
мы вычитаем дельтуИкс и дельтуИгрик между объектом и мышью, и нормализируем его(тоесть, сохраняем направление но длину, читай скорость перемещения устанавливаем в 1, ибо изначально она за одно перемещение достигнет конечной точки)
Нормализация вектора получается путём деления каждого его компонента на его длину(а длина получается по теореме пифагора(или как ещё это называется по геометрическому среднему)).
При этом выходит, что направление к мыши/от мыши настраивается путём подмены мест вычитаемых, т.е. mouseX - obj.x - к мыши obj.x - mouseX - от мыши
Добавлено через 1 час 13 минут
И заодно объясню, что я делал в своём варианте.
Из вектора сдвигов(дельт) я вытаскивал угол направления(в тригонометрии все функции используют значения не в градусах, а в радианах, поэтому я переводил их путем /180*ПИ и наоборот /ПИ*180)
Поворачивал направление на 180 градусов(в обратную сторону) и получал нормаль из направления.
Добавлено через 1 час 18 минут
Без тригонометрии можно обойтись в этом случае, но с тригонометрией открываются большие возможности.