Поворот точки вокруг другого приводит к тому, что расстояние между ними сокращается после повторной итерации
Как указано в заголовке, после каждой итерации расстояние между двумя точками сокращается.
(Мне нужно, чтобы 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);
}
Вы должны хранить свои позиции как значения с плавающей запятой и только конвертировать в 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
.