Analitička geometrija prostora

Presjek pravca i ravnine

U ovom slučaju presječna točka mora zadovoljavati sustav linearnih jednadžbi

\(\begin{align*} Ax+By+Cz&=-D\\ x-\alpha t&=x_0\\ y-\beta t&=y_0\\ z-\gamma t&=z_0 \end{align*}\)

odnosno u matričnom obliku

\(\begin{bmatrix} A&B&C&0\\ 1&0&0&-\alpha\\ 0&1&0&-\beta\\ 0&0&1&-\gamma \end{bmatrix} \begin{bmatrix} x\\ y\\ z\\ t \end{bmatrix}= \begin{bmatrix} -D\\ x_0\\ y_0\\ z_0 \end{bmatrix}.\)

Ako se pravac i ravnina sijeku, tada promatrani sustav linearnih jednadžbi ima jedinstveno rješenje \((x,y,z,t)\) pri čemu su \((x,y,z)\) koordinate presječne točke, a \(t\) je vrijednost parametra za koji se presječna točka dobiva na zadanom pravcu.

U ovom slučaju presječna točka mora zadovoljavati sustav linearnih jednadžbi

\(\begin{align*} a_1u+b_1v-\alpha t&=x_0-x_1\\ a_2u+b_2v-\beta t&=y_0-y_1\\ a_3u+b_3v-\gamma t&=z_0-z_1\\ \end{align*}\)

odnosno u matričnom obliku

\(\begin{bmatrix} a_1&b_1&-\alpha\\ a_2&b_2&-\beta\\ a_3&b_3&-\gamma\\ \end{bmatrix} \begin{bmatrix} u\\ v\\ t \end{bmatrix}= \begin{bmatrix} x_0-x_1\\ y_0-y_1\\ z_0-z_1 \end{bmatrix}.\)

Ako se pravac i ravnina sijeku, tada promatrani sustav linearnih jednadžbi ima jedinstveno rješenje \((u,v,t)\) pri čemu \((u,v)\) daje vrijednosti parametara \(u\) i \(v\) za koje se presječna točka dobiva na zadanoj ravnini, a \(t\) je vrijednost parametra za koji se presječna točka dobiva na zadanom pravcu. Koordinate \((x,y,z)\) od presječne točke dobivamo uvrštavanjem dobivenih parametara u vektorsku jednadžbu ravnine ili vektorsku jednadžbu pravca.

Primjer 1

Odredite presjek pravca \(p\dotsc\frac{x+3}{-1}=\frac{y+2}{3}=\frac{z}{6}\) i ravnine \(x-2y+4z+12=0\).

clear pravac ravnina
pravac.vektor = [-1 3 6];
pravac.tocka = [-3 -2 0];
ravnina = [1 -2 4 12];
A = [[ravnina(1:3); eye(3)] [0 -pravac.vektor]']
B = [-ravnina(4); pravac.tocka']
rj = A \ B;
presjek = struct("tocka", rj(1:3)', "t", rj(4))
rješenje pomoću simboličkog računa
pkg load symbolic
syms x y z t
rj = solve([x+3 == -t, y+2 == 3*t, z == 6*t, x-2*y+4*z+12 == 0], x,y,z,t)
[rj.x rj.y rj.z rj.t]
double([rj.x rj.y rj.z rj.t])
Primjer 2

Odredite presjek pravca \(\vec{r}=(2,1,-1)+t\cdot(1,-1,0)\) i ravnine \(\vec{r}=(2,1,3)+u\cdot(1,0,0)+v\cdot(-1,1,2)\).

clear pravac ravnina
pravac.vektor = [1 -1 0];
pravac.tocka = [2 1 -1];
ravnina.tocka = [2 1 3];
ravnina.vektorU = [1 0 0];
ravnina.vektorV = [-1 1 2];
A = [ravnina.vektorU' ravnina.vektorV' -pravac.vektor']
B = (pravac.tocka - ravnina.tocka)'
rj = A \ B;
prtoc = pravac.tocka + pravac.vektor .* repmat(rj(3), 1, 3);
presjek = struct("u", rj(1), "v", rj(2), "t", rj(3), "tocka", prtoc)
rješenje pomoću simboličkog računa
syms u v
rj = solve([x == 2+t, y == 1-t, z == -1, x == 2+u-v, y == 1+v, z == 3+2*v], x,y,z,u,v,t)
tocka = [rj.x rj.y rj.z]
double(tocka)
parametri = [rj.u rj.v rj.t]
double(parametri)

Implementacija funkcije za traženje presjeka pravca i ravnine

Sadržaj datoteke interPL.m
function presjek = interPL(ravnina, pravac)

#{
interPL(ravnina, pravac) daje presjek ravnine i pravca.
---------------------------------------------------------------------------------
pravac -> struct("tocka", [x1 y1 z1], "vektor", [sx sy sz])
ravnina -> [A B C D]
na izlazu se vraca struktura koja sadrzi polja
"tocka" -> presjek pravca i ravnine
"t" -> parametar za koji se presjek dobiva iz parametarskih jednadžbi pravca
---------------------------------------------------------------------------------
pravac -> struct("tocka", [x1 y1 z1], "vektor", [sx sy sz])
ravnina -> struct("tocka", [x2,y2,z2], "vektorU", [u1,u2,u3], "vektorV", [v1,v2,v3])
na izlazu se vraca struktura koja sadrzi polja
"tocka" -> presjek pravca i ravnine
"u" i "v" -> parametri za koji se presjek dobiva iz parametarskih jednadzbi ravnine
"t" -> parametar za koji se presjek dobiva iz parametarskih jednadžbi pravca
#}

if !any(pravac.vektor)
  disp("Error: vektor smjera pravca je nulvektor");
  return;
endif  

if isstruct(ravnina)

  if !(any(ravnina.vektorU) & any(ravnina.vektorV))
    disp("Error: vektori koji razapinju ravninu ne smiju biti nulvektori");
    return;
  endif
  A = [ravnina.vektorU' ravnina.vektorV' -pravac.vektor'];
  B = (pravac.tocka - ravnina.tocka)';
  r0 = rank(A(:,1:2));
  r1 = rank(A);
  r2 = rank([A B]);
  if r0 != 2
    disp("Error: vektori koji razapinju ravninu ne smiju biti kolinearni");
    return;
  elseif r1 != r2
    disp("pravac i ravnina su paralelni");
    return;
  elseif r1 == 2
    disp("pravac se nalazi u ravnini");
    return;
  else
    rj = A \ B;
    prtoc = pravac.tocka + pravac.vektor .* repmat(rj(3), 1, 3);
    presjek = struct("u", rj(1), "v", rj(2), "t", rj(3), "tocka", prtoc);
  endif

else

  if !any(ravnina(1:3))
    disp("Error: normala ravnine je nulvektor");
    return;
  endif
  A = [[ravnina(1:3); eye(3)] [0 -pravac.vektor]'];
  B = [-ravnina(4); pravac.tocka'];
  r1 = rank(A);
  r2 = rank([A B]);
  if r1 != r2
    disp("pravac i ravnina su paralelni");
    return;
  elseif r1 == 3
    disp("pravac se nalazi u ravnini");
    return;
  else
    rj = A \ B;
    presjek = struct("tocka", rj(1:3)', "t", rj(4));
  endif

endif

endfunction
korištenje funkcije interPL
clear pravac ravnina
pravac.vektor = [-1 3 6];
pravac.tocka = [-3 -2 0];
ravnina = [1 -2 4 12];
rj = interPL(ravnina,pravac)
format rat
rj

clear pravac ravnina
pravac.vektor = [1 -1 0];
pravac.tocka = [2 1 -1];
ravnina.tocka = [2 1 3];
ravnina.vektorU = [1 0 0];
ravnina.vektorV = [-1 1 2];
rj = interPL(ravnina,pravac)
format short
rj

Zadaci

  1. Ispitajte jesu li točke \(A(1,2,3)\) i \(B(4,0,-5)\) s iste strane ravnine \(\Sigma\dotsc 2x-y+5z-1=0\). Odredite točku \(S\) u kojoj pravac \(AB\) siječe ravninu \(\Sigma\). Pripada li točka \(S\) dužini \(\overline{AB}\)?

  2. Neka je \(\Pi\) ravnina koja prolazi kroz točke \(A(1,0,2)\), \(B(-1,4,3)\) i \(C(2,1,-1)\). Neka je \(p\) pravac koji je zadan kao presjek ravnina \(x-y+3z+8=0\) i \(-3x+4y+z-2=0\). Odredite kut između pravca \(p\) i ravnine \(\Pi\). Kut ispišite u stupnjevima i radijanima na 5 decimala. Također, kut ispišite u stupnjevima minutama i sekundama. Odredite opći oblik jednadžbe ravnine \(\Pi\) i parametarske jednadžbe pravca \(p\).

  3. Zadana je ravnina \(\pi\dotsc 2x+y-z-13=0\) i točka \(M(1,2,3)\). Odredite ortogonalnu projekciju \(M'\) točke \(M\) na ravninu \(\pi\) i simetričnu točku \(M''\) od točke \(M\) s obzirom na ravninu \(\pi\). Odredite površinu trokuta \(M'M''G\) ako je \(G(0,-2,5)\).

  4. Neka je \(\Pi\) ravnina koja prolazi točkama \(T_1(1,0,-1)\) i \(T_2(0,2,5)\) i okomita je na ravninu \(\Sigma\dotsc\frac{x}{-3}+\frac{y}{-6}+\frac{z}{1.2}=1\). Odredite udaljenost točke \(D(1,2,-3)\) od ravnine \(\Pi\).

  5. Odredite udaljenost točke \(A(6,1,-5)\) od pravca \(p\dotsc\frac{x-2}{3}=\frac{y+4}{1}=\frac{z-2}{-1}\).

  6. Napišite u Octavi funkciju kutPL(u,v,mjera) koja na izlazu vraća kut između ravnine s normalom u i pravca s vektorom smjera v u zadanoj mjeri. mjera može biti deg, rad ili dms.

  7. Napišite u Octavi funkciju kutLL(u,v,mjera) koja na izlazu vraća kut između pravaca s vektorima smjerova u i v u zadanoj mjeri. mjera može biti deg, rad ili dms.

  8. Napišite u Octavi funkciju kutPP(u,v,mjera) koja na izlazu vraća kut između ravnina s normalama u i v u zadanoj mjeri. mjera može biti deg, rad ili dms.

  9. Napišite u Octavi funkciju ortosimPlane(rav, M) koja na izlazu daje ortogonalnu projekciju točke M na ravninu rav i njezinu simetričnu točku s obzirom na tu ravninu. Ravnina može biti zadana u općem obliku ili s parametarskim jednadžbama.

  10. Napišite u Octavi funkciju distPL(T0, pr) koja računa udaljenost točke T0 od pravca pr.

  11. Napišite u Octavi funkciju distPP(T0, rav) koja računa udaljenost točke T0 od ravnine rav. Ravnina može biti zadana u općem ili parametarskom obliku.