2015-05-29 4 views
0

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

//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 и как я могу получить правильный результат?

@edit

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

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); 

Теперь все работает, как это должно быть. Решено

ответ

0

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.

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

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

+0

Спасибо за помощь. Мне не нужно было создавать матрицу вращения, я просто добавил старые углы к новым, и это отлично работает. – Humberd