Analitička geometrija prostora (2. dio)

Presjek dvaju pravaca

Pravci su zadani svojim vektorskim jednadžbama

\(\begin{gather*} p_1\dotsc (x,y,z)=(x_1,y_1,z_1)+u\cdot(\alpha_1,\beta_1,\gamma_1)\\ p_2\dotsc (x,y,z)=(x_2,y_2,z_2)+v\cdot(\alpha_2,\beta_2,\gamma_2) \end{gather*}\)

Zajednička točka (ako postoji) pravaca \(p_1\) i \(p_2\) mora zadovoljavati sustav linearnih jednadžbi

\(\begin{align*} \alpha_1u-\alpha_2v&=x_2-x_1\\ \beta_1u-\beta_2v&=y_2-y_1\\ \gamma_1u-\gamma_2v&=z_2-z_1 \end{align*}\)

odnosno u matričnom obliku

\(\begin{bmatrix} \alpha_1&-\alpha_2\\ \beta_1&-\beta_2\\ \gamma_1&-\gamma_2\\ \end{bmatrix} \begin{bmatrix} u\\ v \end{bmatrix}= \begin{bmatrix} x_2-x_1\\ y_2-y_1\\ z_2-z_1 \end{bmatrix}.\)

Neka je \(A\) matrica sustava i \(A_p\) proširena matrica sustava, tj.

\(A=\begin{bmatrix} \alpha_1&-\alpha_2\\ \beta_1&-\beta_2\\ \gamma_1&-\gamma_2\\ \end{bmatrix},\qquad A_p=\begin{bmatrix} \alpha_1&-\alpha_2&x_2-x_1\\ \beta_1&-\beta_2&y_2-y_1\\ \gamma_1&-\gamma_2&z_2-z_1\\ \end{bmatrix}.\)

Primjer

Zadani su pravci \(p_1\dotsc\frac{x-1}{8}=\frac{y+2}{-3}=\frac{z+1}{1}\) i \(p_2\dotsc\frac{x-6}{2}=\frac{y+3}{1}=\frac{z-1}{3}\). Ispitajte da li se pravci \(p_1\) i \(p_2\) sijeku i odredite njihov presjek ukoliko postoji.

clear p1 p2 presjek

p1.tocka = [1 -2 -1];
p1.vektor = [8 -3 1];
p2.tocka = [6 -3 1];
p2.vektor = [2 1 3];

A = [p1.vektor; -p2.vektor]';
B = (p2.tocka - p1.tocka)';

disp(repmat('-',1,50));
disp('pravci se sijeku ako je r(A)=r(Ap)=2');
disp(repmat('-',1,50));
printf('r(A) = %d\n', rank(A));
printf('r(Ap) = %d\n', rank([A B]));
disp(repmat('-',1,50));
rj = A\B;
presjek.u = rj(1);
presjek.v = rj(2);
presjek.tocka = p1.tocka + p1.vektor .* repmat(rj(1),1,3)
rješenje pomoću simboličkog računa
pkg load symbolic
syms x y z u v
rj = solve([x == 8*u+1, y == -3*u-2, z == u-1, x == 2*v+6, y == v-3, z == 3*v+1], x,y,z,u,v);
[rj.x rj.y rj.z]
double([rj.x rj.y rj.z])
[rj.u rj.v]
double([rj.u rj.v])

Implementacija funkcije za traženje presjeka dvaju pravaca

Sadržaj datoteke interLL.m
function presjek = interLL(pr1, pr2)

#{
interLL(pr1, pr2) daje presjek dvaju pravaca ukoliko on postoji.
---------------------------------------------------------------------------------
pr1 -> struct("tocka", [x1 y1 z1], "vektor", [a1 a2 a3])
pr2 -> struct("tocka", [x2 y2 z2], "vektor", [b1 b2 b3])
na izlazu se vraca struktura koja sadrzi polja
"tocka" -> presjek pravaca
"u" -> parametar za koji se presjek dobiva na prvom pravcu
"v" -> parametar za koji se presjek dobiva na drugom pravcu
---------------------------------------------------------------------------------
ako se pravci podudaraju, funkcija vraca vrijednost 1
ako su pravci paralelni, funkcija vraca vrijednost 2
ako su pravci mimosmjerni, funkcija vraca vrijednost 3
ako pravci nisu dobro definirani, funkcija vraca vrijednost 0
---------------------------------------------------------------------------------
#}

if !any(pr1.vektor)
  disp("Error: vektor smjera prvog pravca je nulvektor");
  presjek = 0;
  return;
endif

if !any(pr2.vektor)
  disp("Error: vektor smjera drugog pravca je nulvektor");
  presjek = 0;
  return;
endif  

A = [pr1.vektor; -pr2.vektor]';
B = (pr2.tocka - pr1.tocka)'; 
r1 = rank(A);
r2 = rank([A B]);

if r1 != r2
  if r1 == 1
    disp("pravci su paralelni");
    presjek = r2;
    return;
  else
    disp("pravci su mimosmjerni");
    presjek = r2;
    return;
  endif
else
    if r1 == 1
      disp("pravci se podudaraju");
      presjek = r2;
      return;
    else
      rj = A\B;
      presjek.u = rj(1);
      presjek.v = rj(2);
      presjek.tocka = pr1.tocka + pr1.vektor .* repmat(rj(1),1,3);
    endif
endif

endfunction
korištenje funkcije interLL
clear p1 p2
p1.tocka = [1 -2 -1];
p1.vektor = [8 -3 1];
p2.tocka = [6 -3 1];
p2.vektor = [2 1 3];
rj = interLL(p1,p2)
format rat
rj

Zadaci

  1. Zadan je pravac \(p\dotsc\frac{x-2}{1}=\frac{y+4}{-2}=\frac{z+1}{1}\) i točka \(A(3,4,2)\).

    1. Odredite jednadžbu normale \(n\) iz točke \(A\) na pravac \(p\).
    2. Odredite simetričnu točku točke \(A\) s obzirom na pravac \(p\).
    3. Odredite sve točke na pravcu \(p\) koje su od točke \(A\) udaljene \(10\sqrt{2}\).
  2. Zadane su točke \(A(0,4,5)\), \(B(0,0,2)\) i \(C(6,0,2)\).

    1. Odredite točku \(T\) u kojoj simetrala \(s_{\beta}\) unutarnjeg kuta trokuta \(ABC\) pri vrhu \(B\) siječe stranicu \(\overline{AC}\).
    2. Odredite u kojem omjeru točka \(T\) dijeli dužinu \(\overline{AC}\).
  3. Zadani su pravci \(p_1\dotsc\frac{x}{-2}=\frac{y-1}{2}=\frac{z-2}{1}\) i \(p_2\dotsc\frac{x-1}{2}=\frac{y-1}{0}=\frac{z-3}{-2}\).

    1. Pokažite da su \(p_1\) i \(p_2\) mimosmjerni pravci.
    2. Odredite zajedničku normalu pravaca \(p_1\) i \(p_2\).
    3. Izračunajte udaljenost pravaca \(p_1\) i \(p_2\).
  4. Napišite u Octavi funkciju ortosimLine(pr, M) koja na izlazu daje ortogonalnu projekciju točke M na pravac pr i njezinu simetričnu točku s obzirom na taj pravac.

  5. Napišite u Octavi funkciju mimoLL(p1, p2) koja na izlazu daje vektor smjera zajedničke normale mimosmjernih pravaca p1 i p2, njezine presjeke S1 i S2 s tim pravcima te parametre u i v za koje se točke S1 i S2 dobivaju na pravcima p1 i p2. Prilagodite funkciju da dobro radi u slučaju kada se pravci p1 i p2 sijeku. U tom slučaju se točke S1 i S2 podudaraju s točkom S koja je presjek pravaca p1 i p2.