[C++] Odległość punktu od prostej

moterek
Użytkownik
Użytkownik
Posty: 1
Rejestracja: 29 lip 2013, o 09:12
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 1 raz

[C++] Odległość punktu od prostej

Post autor: moterek »

cześć,

w tym temacie:

131462.htm

został przedstawiony program na obliczanie odległości punktu od prostej.

Chciałbym aby ktoś mi wytłumaczył skąd się wzięły wyprowadzenia dla A, B i C w tej funkcji:

Kod: Zaznacz cały

Prosta::Prosta(Punkt p1,Punkt p2) //wyznacz prosta biegnaca przez punkty p1 i p2
{
   if(p1.x()==p2.x())
   {
      a=1;
      b=0;
      c=-p1.x();
   }
   else
   {
      a=p2.y()-p1.y();
      b=p1.x()-p2.y();
      c=p1.y()*p2.x()-p2.y()*p1.x();
   }
}
I dlaczego trzeba rozpatrywać przypadek w pierwszym if-fie ?
Awatar użytkownika
Dasio11
Moderator
Moderator
Posty: 10211
Rejestracja: 21 kwie 2009, o 19:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 40 razy
Pomógł: 2359 razy

[C++] Odległość punktu od prostej

Post autor: Dasio11 »

W kodzie jest literówka: powinno być:

Kod: Zaznacz cały

else
{
    a=p2.y()-p1.y();
    b=p1.x()-p2.x();
    c=p1.y()*p2.x()-p2.y()*p1.x();
}
Ten kod opiera się na fakcie matematycznym: prosta o równaniu

\(\displaystyle{ Ax + By + C = 0}\)

przechodzi przez punkty \(\displaystyle{ p_1 = (x_1, y_1), p_2 = (x_2, y_2),}\) jeśli

\(\displaystyle{ A = y_2 - y_1 \\
B = x_1 - x_2 \\
C = y_1 \cdot x_2 - y_2 \cdot x_1.}\)


Uwaga: nie jest to jedyna możliwość. Pomnożenie wszystkich współczynników przez jedną niezerową liczbę rzeczywistą da prostą, która również przechodzi przez punkty \(\displaystyle{ p_1}\) i \(\displaystyle{ p_2.}\)

Aby wyprowadzić współczynniki podane powyżej, można powołać się na znajome z geometrii analitycznej fakty: wektor \(\displaystyle{ [A, B]}\) jest prostopadły do wektora \(\displaystyle{ [B, -A]}\) oraz do prostej o równaniu

\(\displaystyle{ Ax + By + C = 0.}\)

Wyprowadzenie:    


Te wzory na współczynniki są poprawne zawsze, niezależnie od tego, czy \(\displaystyle{ x_1 = x_2}\) czy nie. Dlatego warunek sprawdzający w tym kodzie nie jest konieczny. Jest on tylko konsekwencją spostrzeżenia, że w takim przypadku można wszystkie współczynniki skrócić przez wspólny dzielnik

\(\displaystyle{ y_2 - y_1,}\)

a więc w jakiś sposób uprościć.
ODPOWIEDZ