Вращаться вокруг объектов

Я пытался сделать один объект, вращающийся вокруг другого:

//childX,childY,childZ are my starting coordinates
//here I count distance to the middle of my coordinate plane
float r = (float) Math.sqrt(Math.pow(childX, 2)+Math.pow(childY, 2)+Math.pow(childZ,2));

//here i convert my angles to radians
float alphaToRad = (float) Math.toRadians(findParent(figure.parentId).rotate[1]);//up_down
float betaToRad = (float) Math.toRadians(findParent(figure.parentId).rotate[0]);//left_right


float newX = (float) (r*Math.cos(betaToRad)*Math.cos(alphaToRad));
float newY = (float) (r*Math.cos(betaToRad)*Math.sin(alphaToRad));
float newZ = (float) (r*Math.sin(betaToRad));'

У меня есть координаты моей начальной точки (5,5,0) и углов 0° и 0°, так что это означает, что координаты не должны меняться после вычисления новых. Но результат:

newX: 7.071068 newY: 0.0 newZ: 0.0

Каждый способ, которым я пытаюсь вычислить новые координаты, всегда имеет этот странный результат. Что это за 7.07 и как я могу получить правильный результат?

@редактировать

Чтобы сделать мою новую точку относительно старой, я просто добавил углы старой точки к новой:

float alphaToRad = (float) Math.toRadians(findParent(figure.parentId).rotate[1]) + Math.atan(childY/childX);
float betaToRad = (float) Math.toRadians(findParent(figure.parentId).rotate[0]) + Math.asin(childZ/r);

Теперь все работает так, как должно. решаемая

1 ответ

Решение

7.07 это значение r в вашем коде, который является расстоянием вашей точки от начала координат:

sqrt(5 * 5 + 5 * 5) = sqrt(50) = 7.0711

С обоими углами равными нулю, все cos() значения будут 1,0, а sin() значения 0.0. Который означает, что newX становится r, что составляет 7,07, и оба newY а также newZ стать 0.0. Что именно то, что вы получили, так что в этом результате нет ничего загадочного.

То, что вы в основном делаете, это размещаете точку в заданном направлении и на расстоянии от начала координат. Расстояние такое же, как исходное расстояние. Направление задается двумя углами, где оба угла, равные 0.0, соответствуют направлению оси x.

Другими словами, вам не хватает того, что вы не учитываете исходное направление точки относительно начала координат. Вы размещаете точку в абсолютном направлении, основанном на двух углах, а не в направлении относительно исходного направления точки.

Чтобы повернуть точку на заданные углы, проще всего построить матрицы поворотов из углов и применить их к вашим точкам.

Другие вопросы по тегам