Как создать 3D вектор с использованием углов XYZ

#math #vector #lua #trigonometry

Вопрос:

Итак, я узнал, как создать вектор2 в 2D, используя только один угол, но теперь мне нужен вектор3, использующий два или три угла

Код, который я использовал для получения 2D-вектора:

 function V2ToForce(Angle,Force)
    local Force = Force or 1
    local X,Y = math.cos(Angle)*Force,math.sin(Angle)*Force 
    return X,Y
end
 

Любой псевдокод мог бы помочь.

Редактировать: Я нашел эту формулу, но она тоже не работает

 function Test(X,Y,Force)    
    local x = math.cos(X) * math.cos(Y);    
    local z = math.sin(X) * math.cos(Y);    
    local y = math.sin(Y);  
    return x*Force,y*Force,z*Force 
end
 

Комментарии:

1. dosent work — Почему ты так думаешь? У вас есть пример ввода и правильного вывода для проверки правильности ваших вычислений?

2. Если все углы равны 0, каким должен быть вектор? (1,0,0)? Все, что вам нужно будет сделать, это повернуть этот вектор вокруг каждой оси. Заказ зависит от вас. (также обратите внимание, что если вы сначала повернете этот вектор вокруг оси x, это не будет иметь никакого эффекта) Кроме того, вам нужно только два угла для создания любого 3d-вектора. Вы могли бы сначала повернуть его вокруг оси Y, затем X. (например, как вы смотрите вокруг в кадре в секунду) (следовательно, почему эта формула принимает только x и y)

3. если все углы равны 0, то это может быть от 0 до 1 в любой координате

4. @EgorSkriptunoff я протестировал это в Lua, когда X от 0 до 360 (в радианах), это работает, но когда Y меняет Вектор3, Y всегда от -1 до 5, а не 0-1, кстати, сила не проблема

5. Вам действительно следует включить в вопрос правильный код, который показал бы, что не так. Формулы, которые вы отредактировали, хорошо известны, и я очень сомневаюсь, что math.sin это вернет что-то неправильное при обычном вводе.

Ответ №1:

У Тая, который прокомментировал, это сработало, все еще есть некоторые ошибки, но ничего такого, что оператор if не может решить.

Вот что я получил для всех, у кого была такая же проблема

 function Test1(X,Y,Force)
    local X1 = math.cos(Y)*Force
    local Y1 = (math.sin(Y)*math.sin(X))*Force
    local Z1 = (-math.sin(Y)*math.cos(X))*Force
    return X1,Y1,Z1
end
function Test2(X,Y,Force)
    local X1 = math.cos(X) * math.cos(Y)
    local Z1 = -math.sin(X) * math.cos(Y)
    local Y1 = math.sin(Y)
    return X*Force,Y*Force,Z1*Force 
end
 

Сри за мой плохой английский