PROGRAMOWANIE I ALGORYTMY

Iloczyn wektorowy, a kierunek skrętu


powrót

Iloczyn wektorowy pozwala w prosty sposób określić, czy kierując się po odcinku AB, w kierunku punktu C skręcimy w lewo, w prawo czy może punkt C jest współliniowy z punktami AB (pójdziemy prosto). W tym celu wykorzystamy iloczyn wektorowy wektorów $$\overrightarrow{AB}\ x\ \overrightarrow{AC}$$

Jeśli wektor AC jest przesunięty w stosunku do wektora AB w zgodnym kierunku ze wskazówkami zegara, to iloczyn wektorowy da wynik ujemny, jeśli wektor AC jest przesunięty w przeciwnym kierunku do wskazówek zegara, to iloczyn tych wektorów będzie dodatni, w przeciwnym razie punkty ABC są współliniowe (leżą na jednej prostej). Dzięki tej informacji łatwo można określić, w jakim kierunku udamy się idąc ku punktowi C.

W zgodnym kierunku ze wskazówkami zegara (skręt w prawo)

 Iloczyn wektorowy

W przeciwnym kierunku ze wskazówkami zegara (skręt w lewo)

Iloczyn wektorowy

Wyznaczenie iloczynu wektorowego

Tworzymy wektor AB, gdzie $$A = (x_A, y_A), B = (x_B, y_B)$$ w następujący sposób: $$\overrightarrow{AB}=[x_B-x_A, y_B-y_A]$$ gdzie $$[x_B-x_A, y_B-y_A]$$ to współrzędne wektora $$\overrightarrow{AB}$$. Następnie tworzymy wektor AC, gdzie $$A = (x_A, y_A), C = (x_C, y_C)$$ $$\overrightarrow{AC}=[x_C-x_A, y_C-y_A]$$ gdzie $$[x_C-x_A, y_C-y_A]$$ to współrzędne wektora $$\overrightarrow{AC}$$. Dla uproszczenia, niech $$\overrightarrow{AB}=[x_1,y_1]$$$$\overrightarrow{AC}=[x_2,y_2]$$

Iloczyn wektorowy wyznaczamy z wyznacznika: $$det \begin{vmatrix}x_1 & x_2\\ y_1 & y_2\end{vmatrix}=x_1\cdot y_2-x_2\cdot y_1$$

 Program

#include<iostream>
#define pkt pair<int, int>
using namespace std;

int iloczyn_wektorowy(pkt A, pkt B, pkt C)
{
	int x1 = C.first - A.first, y1 = C.second - A.second,
		x2 = C.first - B.first, y2 = C.second - B.second;
	return x1*y2 - x2*y1;
}

int main()
{
	pkt A, B, C;
	cout<<"Podaj wspolrzedne punktu A: ";
	cin>>A.first>>A.second;
	
	cout<<"Podaj wspolrzedne punktu B: ";
	cin>>B.first>>B.second;
	
	cout<<"Podaj wspolrzedne punktu C: ";
	cin>>C.first>>C.second;
	
	int iw = iloczyn_wektorowy(A, B, C);
	
	if(iw > 0)
		cout<<"Idac odcinkiem AB nalezy skrecic w lewo w kierunku punktu C";
	else 
		if(iw < 0)
			cout<<"Idac odcinkiem AB nalezy skrecic w prawo w kierunku punktu C";
		else
			cout<<"Punkty sa wspoliniowe";
			
	return 0;
}

Dane wejściowe i wyjściowe

Podaj wspolrzedne punktu A: 1 1
Podaj wspolrzedne punktu B: 2 2
Podaj wspolrzedne punktu C: 3 4
Idac odcinkiem AB nalezy skrecic w lewo w kierunku punktu C