Задача
Найдите углы между вектором [latex] \overrightarrow{a}=(x,y,z)[/latex] и координатными осями [latex]Ox, Oy, Oz[/latex].
Входные данные
Координаты вектора [latex]\overrightarrow{a}=(x,y,z)[/latex].
Выходные данные
Угол между заданным вектором и [latex]Ox[/latex].
Угол между заданным вектором и [latex]Oy[/latex].
Угол между заданным вектором и [latex]Oz[/latex].
Тесты
Входные
данные |
Выходные
данные |
x |
y |
z |
угол c Ox |
угол c Oy |
угол c Oz |
0 |
0 |
1 |
90 |
90 |
0 |
0 |
9999.99 |
0 |
90 |
0 |
90 |
1 |
1 |
1 |
54.7456 |
54.7456 |
54.7456 |
-9999.5 |
-9999.5 |
-9999.5 |
-54.7456 |
-54.7456 |
-54.7456 |
0 |
0 |
0 |
невозможно при нулевом векторе |
Код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
#include #include using namespace std; int main() { double x,y,z, cosx,cosy,cosz; cin>>x>>y>>z;//вводим координаты нашего вектора if (x==0 && y==0 && z==0)//проверяем не является ли наш вектор нулевым { cout<<"Невозможно при нулевом векторе";//если у нас нулевой ветор выводить ошибку } else { cosx=x/(sqrt(x*x+y*y+z*z));//при ином условии подсчитываем косинусы углов между вектором и осями координат cosy=y/(sqrt(x*x+y*y+z*z)); cosz=z/(sqrt(x*x+y*y+z*z)); cout<<acos(cosx)*180/M_PI<<" "<<acos(cosy)*180/M_PI<<" "<<acos(cosz)*180/M_PI;// выводим полученые углы координат в градусах } return 0; } |
Решение задачи
Для начала проверим не является ли заданный вектор нулевым, так как он не будет образовывать угол между векторами. Если это нулевой, то выводить, что это невозможно при нулевом векторе. При другом условии решим задачу,а поскольку в условии нам даны координаты только 1 вектора, а для вычисления угла между 2 векторами нужно 2 пары координат, то будем считать, что [latex] Ox(1,0,0) [/latex], [latex] Oy(0,1,0) [/latex],[latex] Oz(0,0,1) [/latex].
Теперь мы можем вычислить угол между векторами через формулу[latex] \cos{ |\widehat { a,b } }|=\frac { \overrightarrow { a } \overrightarrow { b } }{ \left| \overrightarrow { a } \right| \left| \overrightarrow { b } \right| } [/latex], где [latex] \overrightarrow { a } \overrightarrow { b }=\ x_a\cdot{x_b}+y_a\cdot{y_b}+z_a\cdot{z_b}\[/latex] и [latex] { \left| \overrightarrow { a } \right| }=\sqrt{x_a^2+y_a^2+z_a^2} [/latex], которую можно сократить в соответствии с нашими значениями координат [latex]Ox,Oy,Oz [/latex] и в итоге получаем формулу [latex] \arccos=\frac{o}{\sqrt{x_a^2+y_a^2+z_a^2}} [/latex], где [latex] O [/latex] ось координат и [latex]o [/latex] значение по этой оси координат. В эту формулу поочередно подставляем наши значения и получаем косинусы углов между осями координат и заданным вектором. Для вычисления углов в радианах воспользуемся встроенной функцией [latex] acos [/latex], а для вычисления в градусах домножим полученный результат на 180 и разделим на встроенное значение числа [latex] \pi [/latex].
Ссылки
Ideone
Related Images:
Для отправки комментария необходимо войти на сайт.