У меня была головная боль в течение нескольких часов, пытаясь выяснить, что случилось в моем алгоритме вращения и, наконец, я узнал, что была проблема в Java интерпретации таких расчетов:Java расчеты Wierd
float playerCenterX = 248.0f;
float playerCenterY = 248.0f;
playerCenterX = (float)((playerCenterX - (float)512) * Math.cos(angle) - (playerCenterY - (float)300) * Math.sin(angle) + (float)512);
playerCenterY = (float)((playerCenterX - (float)512) * Math.sin(angle) + (playerCenterY - (float)300) * Math.cos(angle) + (float)300);
Код выше, давал действительно неожиданные результаты, вместо того, чтобы вращать точку вокруг (512, 300) относительно заданного угла, она давала мне координаты, которые образуют символ бесконечности (с углом от 0 до 2PI).
А теперь такое незначительное, казалось бы, неважное и неуместное изменение фиксирует код, указанный выше:
float playerCenterX = 248.0f;
float playerCenterY = 248.0f;
float playerCenterX2 = (float)((playerCenterX - (float)512) * Math.cos(angle) - (playerCenterY - (float)300) * Math.sin(angle) + (float)512);
float playerCenterY2 = (float)((playerCenterX - (float)512) * Math.sin(angle) + (playerCenterY - (float)300) * Math.cos(angle) + (float)300);
Так подписавшись результатом вычисления в новом переменный, не используется в правой части уравнения решает проблему , Теперь ... может кто-нибудь объяснить мне, что здесь происходит?
Ох дерьмо ... теперь так больно узнать правду ... спасибо, что указали это для меня – Savail
Трудно, когда вы долго работаете над проблемой, чтобы найти ошибку, где вы не ожидаете это :) Добро пожаловать. – mkrakhin
@Savail, не волнуйтесь. мы все были там. –