Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.227.114.125] |
|
Сообщ.
#1
,
|
|
|
Задача запилить метод lookTo(Actor actor). Реализация следующая:
lookTo(Actor actor) { this.rotateTo( Math.atan2(actor.position.y - this.position.y, actor.position.x - this.position.x) ); } Но существует некоторая проблема - поворот происходит не всегда в нужную сторону, иногда объекты описывают 360-градусный поворот. Пробовал такой алгоритм: - Получать дельту между текущим градусом поворота и результатом atan2 (в будущ.N) - Получать минимальное значение между Math.abs(N), Math.abs(N - Math.PI*2) и Math.abs(N + Math.PI*2) - Это минимальное значение и будет говорить о том какую компенсацию надо применять - оставлять как есть, или добавлять/вычитать PI*2 В верном направлении я мыслю? Или есть более простые способы добиться минимального поворота "вектора" в сторону координат XY? Добавлено P.S. Пример проблемы: http://codepen.io/SerafimArts/pen/LkBWVG |
Сообщ.
#2
,
|
|
|
Цитата Serafim @ Качественно - да, в верном. Более "простых способов" как бы нет, ибо под ними подразумеваются простенькие функции, кои все непрерывны, а поворот на 180 градусов терпит неустранимый разрыв (можно по двум путям туда повернуться), так что всё равно где-то будет сравнение и выбор. В верном направлении я мыслю? Или есть более простые способы добиться минимального поворота "вектора" в сторону координат XY? |
Сообщ.
#3
,
|
|
|
Знак функции CCW показывает в какую сторону нужно вращать:
Function CCW(v1 As Vector, v2 As Vector) As Single CCW = v1.x * v2.y - v1.y * v2.x End Function |