Witam, jestem początkująca (totalnie zielona), proszę o pomoc.
Zadanie brzmi:
Napisać program, który dla dwóch wektorów z przestrzeni N-wymiarowej rozłoży pierwszy z wektorów na składową równoległą i prostopadłą do drugiego wektora.
PRZYKŁAD:
Rozłóż wektor a=[-5,10,0] na dwie składowe- równoległą i prostopadłą do wektora b= [6,8,0].
ROZWIĄZANIE:
Wprowadzamy wersor (jednostkowy) ib=b/|b|=[3/5, 4/5, 0] mający kierunek wektora b.Wówczas iloczyn skalarny **ib***a=5 jest rzutem wektora a na kierunek wyznaczony przez wektor b. Jednak sam rzut nie jest wektorem (skalar), aby wyznaczyć wektor **a||**należy nadać wspomnianemu rzutowi odpowiedni kierunek a|=(ib * a)=[3,4,0]. Ponieważ a=a|| + a_, to aprostopadle= a - a||=[-8,6,0].
Czyli zrozumiałam, że:
a=[-5,10,0]
b=-6,8,0]
to: ib=b/|b|=[3/5, 4/5, 0], |b|=pierwiastek z sumy kwadratów składowych wektora b
a||b= (ib * a)ib= [3,4,0]
a prostopadłe do b= a - a||b= [-8,6,0]
mam problem z napisaniem tych prostopadłych i równoległych...
Proszę o pomoc, a to część mojego kodu.
#include <iostream>
#include <math.h>
#include <iomanip>
#include <cstdlib>
using namespace std;
int main()
{
int N, n;
const int NMAX=10;
float A [NMAX];
float B [NMAX];
cout << "Program rozklada pierwszy wektor na skladowa rownolegla i \nprostopadla do drugiego wektora.\n\n";
cout << "Podaj rozmiar obszaru: ";
cin >> N;
if (N<=10)
{
for (n=0; n<N; n=n+1)
{
cout << "Podaj skladowe wektora A: \n";
cin >> A[n];
}
for (n=0; n<N; n=n+1)
{
cout << "Podaj skladowe wektora B: \n";
cin >> B[n];
}
//a || b//
//?!?!?!?!//
//a _ b//
//?!?!?!?!?!//
}
else
cout << "Obszar za szeroki! Maksymalny rozmiar obszaru to 10.\n\n";
system("pause");
return 0;
}