Что происходит с Math.sin и Math.cos в Java? И как это исправить?

Я пытаюсь реализовать матрицу вращения. Но есть очень странный эффект:Как это выглядит

Это мой код:

public void rotation(PointF point, double a) {

    point.x = (point.x - 400) * Math.cos(a) - (point.y - 300) * Math.sin(a)
            + 400;
    point.y = (point.x - 400) * Math.sin(a) + (point.y - 300) * Math.cos(a)
            + 300;
}

В результате имеем точку падения в координатах 400,300.

Что случилось? Я хочу, чтобы точка двигалась по кругу? Как я могу сделать лучше?

1 ответ

Решение

Ну не должно быть так

double x = point.x * Math.cos(a) - point.y * Math.sin(a);
double y = point.x * Math.sin(a) + point.y * Math.cos(a);
point.x = x;
point.y = y;

предотвратить модификацию point.x слишком рано?

Другие вопросы по тегам