Поворот точки вокруг другого приводит к тому, что расстояние между ними сокращается после повторной итерации

100
8

Как указано в заголовке, после каждой итерации расстояние между двумя точками сокращается.

(Мне нужно, чтобы x, y были ints ant the end)

Спасибо !

public void updatePlayerFlip()
{
double angle_stepsize = 0.1;
double angleInRadians = angle_stepsize * (Math.PI / 180);
double cosTheta = Math.cos(angleInRadians);
double sinTheta = Math.sin(angleInRadians);

flipPosition.x = (int) (cosTheta * (flipPosition.x - spinPosition.x) -
sinTheta * (flipPosition.y - spinPosition.y) + spinPosition.x);
flipPosition.y = (int) (sinTheta * (flipPosition.x - spinPosition.x) +
cosTheta * (flipPosition.y - spinPosition.y) + spinPosition.y);
}

спросил(а) 2021-01-19T15:25:56+03:00 6 месяцев, 1 неделя назад
1
Решение
108

Вы должны хранить свои позиции как значения с плавающей запятой и только конвертировать в int, когда вам нужно использовать результат как int. Например, если предположить, что DoublePoint представляет собой класс с плавающей запятой двойной точности, который представляет позицию x и y, а IntPoint - целочисленный класс точек, вы можете сделать что-то вроде этого:

class Player {
DoublePoint position;

IntPoint getIntPosition()
{
return IntPoint((int)position.x, (int)position.y);
}

void RotatePosition(double radians)
{
DoublePoint newPos;
newPos.x = position.x * cos(radians);
newPos.y = position.y * sin(radians);
position = newPos;
}
};

Затем выполните все вычисления в плавающей точке (например, в RotatePosition()). Когда вам понадобится целочисленное значение, вызовите getIntPosition() вместо прямого использования position.

ответил(а) 2021-01-19T15:25:56+03:00 6 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема