Задача: Угол между векторами
Найти угол между векторами [latex]A(n)[/latex] и [latex]B(n)[/latex] используя формулу:
[latex]cos\varphi =\cfrac { \left( A,B \right) }{ \left| A \right| \cdot \left| B \right| } =\cfrac { \sum _{ i=1 }^{ n }{ { a }_{ i }{ b }_{ i } } }{ \sqrt { \sum _{ i=1 }^{ n }{ { a }_{ i }^{ 2 } } } \sqrt { \sum _{ i=1 }^{ n }{ { b }_{ i }^{ 2 } } } }[/latex]N | A(n) | B(n) | Rad & Deg |
2 | 3 4 | 4 3 | 0.283794 16.2596 |
2 | 7 1 | 5 5 | 0.643501 36.8686 |
3 | 3 4 0 | 4 4 2 | 0.367208 21.0388 |
10 | 7 7 7 7 7 7 7 7 7 7 | 7 7 7 7 7 7 7 7 7 7 | 0 0 |
2 | 0 2 | 3 0 | 1.5708 89.9969 |
2 | -3 5 | 4 -1 | 2.35619 134.995 |
Код программы на С++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#include <iostream> #include <cmath> using namespace std; int main() { int n, m; cin >> n; //Кол-во элементов из которых состоит вектор double A[n], B[n]; double coq, s1, s2, s3, deg; for(int j=0; j<n; j++) //Инициализация А cin >> A[j]; for(int j=0; j<n; j++) //Инициализация В cin >> B[j]; for(int i=0; i<n; i++){ // Вычисление каждой суммы указанной в формуле s1+=A[i]*B[i]; s2+=A[i]*A[i]; s3+=B[i]*B[i]; } coq=s1/sqrt(s2*s3); deg=acos(coq); cout << "Rad:" << deg << "\nDeg:" << (deg*180)/3.1417; return 0; } |
Код программы на Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
import java.util.*; import java.lang.*; import java.io.*; import java.lang.Math; class Main { public static void main (String[] args) throws java.lang.Exception { Scanner in=new Scanner(System.in); int n, m; n=in.nextInt(); double A[]=new double[n]; double B[]=new double[n]; double coq, s1, s2, s3, deg; s1=0; s2=0; s3=0; for(int j=0; j<n; j++) //Инициализация А A[j]=in.nextDouble(); for(int j=0; j<n; j++) //Инициализация В B[j]=in.nextDouble(); for(int i=0; i<n; i++){ // Вычисление каждой суммы указанной в формуле s1+=A[i]*B[i]; s2+=A[i]*A[i]; s3+=B[i]*B[i]; } coq=s1/Math.sqrt(s2*s3); deg=Math.acos(coq); System.out.printf("Rad: %8.6f \n", deg); System.out.printf("Deg: %8.4f", (deg*180)/3.1417); } } |
Чтобы выполнить задачу, требуется всего лишь следовать вычислениям формулы. Для того, что бы узнать значение не косинуса а самого угла, применяем математическую функцию [latex]acos[/latex].
— Пожалуйста, используйте latex вместо картинок для задания формул. Понимаю, Вашу проблему, но всё что нас не убивает…
— Включите, пожалуйста в таблицу тесты с прямым и тупым углом.
А ссылка для выполнения кода исчезла? Или её и не было?
Принято