Не зная Java достаточно, чтобы дать полный ответ;правильное решение с точки зрения математики, как вы подозреваете: перевести центр объекта в начало координат, поверните, а затем переведите его обратно в исходное положение.
Однако вполне вероятно (то есть, я предполагаю), что когдаВы комбинируете преобразования, они умножаются после, чтобы дать эффект, который преобразования происходят в пространстве модели.То, что вы, вероятно, хотите, это предварительное умножение, чтобы дать эффект, что преобразования происходят в мировом пространстве.
Рассмотрим паруса ветряной мельницы.В коде вы хотели бы иметь возможность перевести на вершину ветряной мельницы, а затем вызвать процедуру, которая рисует паруса.Эта процедура может применить вращение, а затем нарисовать.Но с точки зрения трансформаций, вы на самом деле хотите вращать паруса, находясь в начале координат, чтобы они вращались вокруг своего центра, а затем перемещали их наружу.Таким образом, преобразования применяются в обратном порядке к порядку, в котором вы их запрашиваете.
Это означает, что вы хотите применить преобразования следующим образом:
- отойти отorigin
- rotate
- перейти к исходной точке
Например, если вы были в OpenGL (который также является пост-множителем, и достаточно легко следовать вэтот пример, даже если вы на самом деле этого не знаете) вы можете сделать:
glTranslatef(centreOfBody.x, centreOfBody.y, 0.0f);
glRotatef(angle, 0.0f, 0.0f, 1.0f);
glTranslatef(-centreOfBody.x, -centreOfBody.y, 0.0f);