Przekazana do funkcji checkOrth() tablica points[4][2] zawiera współrzędne czterech punktów. Przez pierwsze dwa punkty przechodzi jedna prosta, przez dwa kolejne punkty - druga.
Funkcja powinna zwrócić wartość true jeżeli proste przecinają się pod kątem prostym lub false - w przeciwnym razie.
No i zabrałem się tak:
Dwie proste są prostopadłe wtedy, gdy iloczyn ich współczynników kierunkowych jest równy -1. Teraz zostaje nam znaleźć współczynniki tych dwóch prostych i sprawdzić, czy ich iloczyn jest równy -1. Żeby je znaleźć tworzymy układ równań dla pierwszej i drugiej prostej. Dla pierwszej mamy:
\(\displaystyle{ \begin{cases} y _{1} = a _{1}x _{1} + b \\ y _{2} = a _{1}x _{2} + b \end{cases}}\)
Z tego wyznaczamy \(\displaystyle{ a _{1}}\) i mamy:
\(\displaystyle{ a _{1} = \frac{y _{2}-y _{1}}{x _{2}-x _{1} }}\)
gdzie \(\displaystyle{ y _{1}}\) to wartość \(\displaystyle{ y}\) pierwszego punktu, a \(\displaystyle{ x _{1}}\) to wartość \(\displaystyle{ x}\) pierwszego punktu itd.
No i analogicznie wyznaczamy drugi współczynnik kierunkowy:
\(\displaystyle{ a _{2} = \frac{y _{4}-y _{3}}{x _{4}-x _{3} }}\)
Teraz wystarczy sprawdzić, czy \(\displaystyle{ a _{1} \cdot a _{2}=-1}\), czyli czy \(\displaystyle{ \frac{(y _{2}-y _{1}) (y _{4}-y _{3}) }{(x _{2}-x _{1}) (x _{4}-x _{3})}=-1}\)
Kod: Zaznacz cały
bool checkOrth( int points[4][2] )
{
int x = points[1][0]-points[0][0]; //x2-x1
int y = points[2][0]-points[3][0]; //x4-x3
int z = points[1][1]-points[0][1]; //y2-y1
int c = points[3][1]-points[2][1]; //y4-y3
if ( (z*c)/(x*y) == -1) {
return true;
} else {
return false;
}
}