что означает выражение "x * Math.cos (angle) - y * Math.sin (angle)"? - PullRequest
0 голосов
/ 17 февраля 2020

Вышеупомянутое выражение взято из метода ниже. Я знаю, что для поворота точки вокруг центра нам нужно

  1. Переместить точку в начало координат
  2. Сделать поворот и
  3. Переместить точку назад

Но части, которые я не могу понять:

r[0] = x * Math.cos(angle) - y * Math.sin(angle);
                           ^
                           |
                          why we use the minus sign here?

r[1] = x * Math.sin(angle) + y * Math.cos(angle);
                           ^
                           |
                            And why here we use plus sign instead of minus?



Vec2.prototype.rotate = function (center, angle) {
//rotate in counterclockwise
var r = [];
var x = this.x - center.x;
var y = this.y - center.y;
r[0] = x * Math.cos(angle) - y * Math.sin(angle);
r[1] = x * Math.sin(angle) + y * Math.cos(angle);
r[0] += center.x;
r[1] += center.y;
return new Vec2(r[0], r[1]);
};

Книга должна была быть великолепной, но она не объясняет большую часть кода, она просто выплевывает.

1 Ответ

0 голосов
/ 18 февраля 2020

Я понял! Только что посмотрел видео доктора Пеяма о матрице преобразования.

Чтобы получить x 'и y', мы умножаем матрицу преобразования на текущую координату (x, y) , введите описание изображения здесь

...