[c++]Sprawdzanie prostopadłości prostych

Awatar użytkownika
SkitsVicious
Użytkownik
Użytkownik
Posty: 21
Rejestracja: 23 sty 2018, o 10:42
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 4 razy

[c++]Sprawdzanie prostopadłości prostych

Post autor: SkitsVicious » 29 sie 2018, o 12:59

Witam, mam oto takie zadanie:

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;
   }
}
I teraz pytanie: co jest nie tak? Wydaje mi się, że wszystko zrobiłem dobrze, ale niestety tak nie jest. Z góry dzięki za podpowiedź
Ostatnio zmieniony 29 sie 2018, o 16:51 przez Afish, łącznie zmieniany 1 raz.
Powód: Symbol mnożenia to \cdot.

Awatar użytkownika
leg14
Użytkownik
Użytkownik
Posty: 3121
Rejestracja: 5 lis 2014, o 20:24
Płeć: Mężczyzna
Lokalizacja: Radom
Podziękował: 152 razy
Pomógł: 475 razy

[c++]Sprawdzanie prostopadłości prostych

Post autor: leg14 » 29 sie 2018, o 16:22

Nie wiem co dokładnie jestźle, ale na pewno zamiast ( (z*c)/(x*y) == -1)

napisz (z*c)==-(x*y) dzielenei intów to nie jest dobry pomysł
Ostatnio zmieniony 29 sie 2018, o 16:52 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.

Afish
Moderator
Moderator
Posty: 2810
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 352 razy

Re: [c++]Sprawdzanie prostopadłości prostych

Post autor: Afish » 29 sie 2018, o 16:54

Lepiej byłoby użyć iloczynu skalarnego wektorów.

Awatar użytkownika
mortan517
Użytkownik
Użytkownik
Posty: 3360
Rejestracja: 6 lis 2011, o 15:38
Płeć: Mężczyzna
Lokalizacja: Krk
Podziękował: 112 razy
Pomógł: 662 razy

Re: [c++]Sprawdzanie prostopadłości prostych

Post autor: mortan517 » 29 sie 2018, o 18:09

Linia numer 4.

Awatar użytkownika
SkitsVicious
Użytkownik
Użytkownik
Posty: 21
Rejestracja: 23 sty 2018, o 10:42
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 4 razy

Re: [c++]Sprawdzanie prostopadłości prostych

Post autor: SkitsVicious » 29 sie 2018, o 18:21

mortan517 pisze:Linia numer 4.
O kurczaki. Tak głupi błąd. Po zamianie dwóch liczb w 4 linii wszystko działa idealnie. Dziękuję bardzo

a4karo
Użytkownik
Użytkownik
Posty: 17039
Rejestracja: 15 maja 2011, o 20:55
Płeć: Mężczyzna
Lokalizacja: Bydgoszcz
Podziękował: 2 razy
Pomógł: 2866 razy

Re: [c++]Sprawdzanie prostopadłości prostych

Post autor: a4karo » 30 sie 2018, o 05:05

Ciekawe co wyjdzie z tego algorytmu gdy \(\displaystyle{ x3=x4}\)

Fibik
Użytkownik
Użytkownik
Posty: 948
Rejestracja: 27 wrz 2005, o 22:56
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 11 razy
Pomógł: 74 razy

Re: [c++]Sprawdzanie prostopadłości prostych

Post autor: Fibik » 1 paź 2018, o 19:28

On jakieś głupoty wylicza.

Warunek prostopadłość wektorów u i v: u.v = 0, a nie jakieś -1.

ODPOWIEDZ