Итак, у вас есть мера расстояния от того, где объект начинался вдоль его внутренней боковой оси, и мера угла между этой осью и горизонталью?
Если это так, то формула, которую вы хотите - простая тригонометрия. Предполагая, что объект начинался с (x, y) и прошел единицы измерения «расстояние» вдоль оси под углом «угол» относительно горизонтали, тогда текущая позиция (x ', y') будет равна:
x' = x + distance * cos(angle)
y' = y + distance * sin(angle)
Если у вас начало координат в левом нижнем углу экрана и оси расположены в виде миллиметровки с увеличением x вправо и увеличением y при движении вверх, это предполагает, что угол измеряется против часовой стрелки и объект движется вдоль положительный х, когда угол равен нулю.
Если вы разрешите объяснение маханием рукой, формула работает, потому что одно из определений синуса и косинуса состоит в том, что они являются (x, y) координатами точки снаружи единичного круга под указанным углом. Это также совпадает с самой первой вещью, которую большинство людей узнают о тригонометрии, что синус «противоположен гипотенузе», а косинус «соседствует с гипотенузой». В этом случае ваша гипотенуза имеет длину «расстояние», и вы хотите получить «противоположную» и «смежную» длины прямоугольного треугольника, который совпадает с осями.
Предполагая, что Android следует за J2SE в этой области, следует обратить внимание на то, что Math.sin
и Math.cos
принимают угол в радианах, тогда как OpenGL rotatef
принимает аргумент в градусах. Math.toDegrees
и Math.toRadians
могут сделать преобразование для вас.