Analitička geometrija prostora u pythonu

Ovdje su pokazane neke implementirane naredbe u sympy modulu vezane uz geometriju trodimenzionalnog prostora.

In [1]:
import platform
In [2]:
platform.platform()
Out[2]:
'Linux-5.4.143-1-MANJARO-x86_64-with-glibc2.33'
In [3]:
platform.python_version()
Out[3]:
'3.9.6'
In [4]:
from sympy import *
In [5]:
init_printing()

Zbrajanje i skaliranje radijvektora. Skalarni produkt radijvektora

In [6]:
A=Point3D(1,-2,7)
B=Point3D(9,1,-5)
In [7]:
A+B
Out[7]:
$\displaystyle Point3D\left(10, -1, 2\right)$
In [8]:
A.scale(2,5,-3)
Out[8]:
$\displaystyle Point3D\left(2, -10, -21\right)$
In [9]:
A.dot(B)
Out[9]:
$\displaystyle -28$

Vektor određen s dvije točke

In [10]:
A=Point3D(2,3,1)
B=Point3D(-4,2,5)
In [11]:
B.x
Out[11]:
$\displaystyle -4$
In [12]:
B.y
Out[12]:
$\displaystyle 2$
In [13]:
B.z
Out[13]:
$\displaystyle 5$

Vektor $\overrightarrow{AB}$

In [14]:
A.direction_ratio(B)
Out[14]:
$\displaystyle \left[ -6, \ -1, \ 4\right]$

Udaljenost točaka

In [15]:
A=Point3D(1,3,-2)
B=Point3D(6,-9,1)
In [16]:
A,B
Out[16]:
$\displaystyle \left( Point3D\left(1, 3, -2\right), \ Point3D\left(6, -9, 1\right)\right)$

Egzaktna udaljenost

In [17]:
d=A.distance(B)
d
Out[17]:
$\displaystyle \sqrt{178}$

Udaljenost na 15 znamenaka (default)

In [18]:
N(d)
Out[18]:
$\displaystyle 13.3416640641263$

Udaljenost na 50 znamenaka

In [19]:
N(d,50)
Out[19]:
$\displaystyle 13.34166406412633371248943627250846646911846482744$

Kolinearnost točaka

In [20]:
A=Point3D(1,2,3)
B=Point3D(4,0,-5)
C=Point3D(37/16,9/8,-1/2)
D=Point3D(0,-3,2/3)
In [21]:
C
Out[21]:
$\displaystyle Point3D\left(\frac{37}{16}, \frac{9}{8}, - \frac{1}{2}\right)$
In [22]:
C.evalf()
Out[22]:
$\displaystyle Point3D\left(2.3125, 1.125, -0.5\right)$

Točke $A,$ $B$ i $C$ su kolinearne.

In [23]:
Point3D.are_collinear(A,B,C)
Out[23]:
True

Točke $A,$ $B$ i $D$ nisu kolinearne.

In [24]:
Point3D.are_collinear(A,B,D)
Out[24]:
False

Točke $A,$ $B,$ $C$ i $D$ nisu kolinearne.

In [25]:
Point3D.are_collinear(A,B,C,D)
Out[25]:
False

Komplanarnost točaka

In [26]:
A=Point3D(0,1,-1)
B=Point3D(3,0,-2)
C=Point3D(1,1,-2)
D=Point3D(0,0,1)
E=Point3D(5,4,3)

Točke $A,$ $B,$ $C$ i $D$ su komplanarne.

In [27]:
Point3D.are_coplanar(A,B,C,D)
Out[27]:
True

Točke $A,$ $B,$ $C$ i $E$ nisu komplanarne.

In [28]:
Point3D.are_coplanar(A,B,C,E)
Out[28]:
False

Točke $A,$ $B,$ $C,$ $D$ i $E$ nisu komplanarne.

In [29]:
Point3D.are_coplanar(A,B,C,D,E)
Out[29]:
False

Kosinusi smjera radijvektora

In [30]:
A=Point3D(1,-2,3)
O=Point3D(0,0,0)
In [31]:
O.direction_cosine(A)
Out[31]:
$\displaystyle \left[ \frac{\sqrt{14}}{14}, \ - \frac{\sqrt{14}}{7}, \ \frac{3 \sqrt{14}}{14}\right]$

Kosinusi smjera vektora određenog s dvije točke

In [32]:
A=Point3D(1,4,-2)
B=Point3D(0,-2,1)
In [33]:
A.direction_cosine(B)
Out[33]:
$\displaystyle \left[ - \frac{\sqrt{46}}{46}, \ - \frac{3 \sqrt{46}}{23}, \ \frac{3 \sqrt{46}}{46}\right]$

Zadavanje ravnine pomoću točke i vektora normale

In [34]:
rav=Plane(Point3D(1,2,1),(-2,3,-1))
In [35]:
rav
Out[35]:
$\displaystyle Plane\left(Point3D\left(1, 2, 1\right), \left( -2, \ 3, \ -1\right)\right)$
In [36]:
rav.p1
Out[36]:
$\displaystyle Point3D\left(1, 2, 1\right)$
In [37]:
rav.normal_vector
Out[37]:
$\displaystyle \left( -2, \ 3, \ -1\right)$

Opći oblik jednadžbe ravnine

In [38]:
rav.equation()
Out[38]:
$\displaystyle - 2 x + 3 y - z - 3$

Neka slučajna točka u ravnini

In [39]:
ranT=rav.random_point()
In [40]:
ranT
Out[40]:
$\displaystyle Point3D\left(- \frac{381787712982347}{562949953421312}, - \frac{2006389166352743}{140737488355328}, - \frac{12500972215266079}{281474976710656}\right)$

Koordinate slučajne točke zaokružene na 5 znamenaka

In [41]:
ranT.n(5)
Out[41]:
$\displaystyle Point3D\left(-0.67819, -14.256, -44.412\right)$

Neka druga slučajna točka u ravnini

In [42]:
ranT2=rav.random_point(seed=41)
In [43]:
ranT2.n(5)
Out[43]:
$\displaystyle Point3D\left(7.2173, 6.0791, 0.8028\right)$

Parametarske jednadžbe ravnine

In [44]:
u,v=var('u v')
In [45]:
par=rav.arbitrary_point(u,v)
par
Out[45]:
$\displaystyle Point3D\left(- 3 u - 2 v + 1, - 2 u + 3 v + 2, 13 v + 1\right)$

Točka u ravnini koja se dobije za $u=2,$ $v=1$

In [46]:
Tp=par.subs({u:2,v:1})
Tp
Out[46]:
$\displaystyle Point3D\left(-7, 1, 14\right)$

Dobivanje parametara za danu točku koja leži u ravnini

In [47]:
rav.parameter_value(Tp,u,v)
Out[47]:
$\displaystyle \left\{ u : 2, \ v : 1\right\}$

Zadavanje ravnine pomoću tri nekolinearne točke

In [48]:
T1=Point3D(1,2,1)
T2=Point3D(-1,0,3)
T3=Point3D(-2,-1,5)
In [49]:
rav=Plane(T1,T2,T3)
rav
Out[49]:
$\displaystyle Plane\left(Point3D\left(1, 2, 1\right), \left( -2, \ 2, \ 0\right)\right)$
In [50]:
rav.normal_vector
Out[50]:
$\displaystyle \left( -2, \ 2, \ 0\right)$
In [51]:
rav.p1
Out[51]:
$\displaystyle Point3D\left(1, 2, 1\right)$

Opći oblik jednadžbe ravnine

In [52]:
rav.equation()
Out[52]:
$\displaystyle - 2 x + 2 y - 2$

Parametarske jednadžbe ravnine

In [53]:
par=rav.arbitrary_point(u,v)
par
Out[53]:
$\displaystyle Point3D\left(1 - 2 u, 2 - 2 u, 8 v + 1\right)$

Točka u ravnini koja se dobije za $u=3,$ $v=-5$

In [54]:
Tp=par.subs({u:3,v:5})
Tp
Out[54]:
$\displaystyle Point3D\left(-5, -4, 41\right)$

Dobivanje parametara za danu točku koja leži u ravnini

In [55]:
rav.parameter_value(Tp,u,v)
Out[55]:
$\displaystyle \left\{ u : 3, \ v : 5\right\}$

Udaljenost točke od ravnine

točka: $T(1,-2,4)$    ravnina: $2x-y+3z-10=0$

In [56]:
rav=Plane(Point3D(5,0,0),(2,-1,3))
T=Point3D(1,-2,4)
In [57]:
d=rav.distance(T)
d
Out[57]:
$\displaystyle \frac{3 \sqrt{14}}{7}$
In [58]:
N(d)
Out[58]:
$\displaystyle 1.60356745147455$

Točka $T$ ne leži u zadanoj ravnini.

In [59]:
rav.is_coplanar(T)
Out[59]:
False

Međusobni položaj ravnina

$\pi_1\dotsc 2x+3y-4z+5=0\qquad$ $\pi_2\dotsc x-2y+2z-1=0$

In [60]:
rav1=Plane(Point3D(-5/2,0,0),(2,3,-4))
rav2=Plane(Point3D(1,0,0),(1,-2,2))

kut između normali

In [61]:
kut1=rav1.angle_between(rav2)
kut1
Out[61]:
$\displaystyle \operatorname{acos}{\left(- \frac{4 \sqrt{29}}{29} \right)}$

kut između normali u radijanima

In [62]:
kr=N(kut1)
kr
Out[62]:
$\displaystyle 2.40801132994971$

kut između normali u stupnjevima

In [63]:
ks=N(kut1*180/pi)

kut između ravnina u stupnjevima

In [64]:
180-ks
Out[64]:
$\displaystyle 42.0311137741973$

kut između ravnina u radijanima

In [65]:
N(pi-kr)
Out[65]:
$\displaystyle 0.733581323640083$

Ravnine nisu paralelne niti okomite.

In [66]:
rav1.is_parallel(rav2)
Out[66]:
False
In [67]:
rav1.is_perpendicular(rav2)
Out[67]:
False

Ravnine su različite.

In [68]:
rav1.is_coplanar(rav2)
Out[68]:
False

Ravnine se sijeku po pravcu koji prolazi točkama $T_1(-1,-1,0)$ i $T_2(-3,-9,-7)$.

In [69]:
rav1.intersection(rav2)
Out[69]:
$\displaystyle \left[ Line3D\left(Point3D\left(-1, -1, 0\right), Point3D\left(-3, -9, -7\right)\right)\right]$

Ortogonalna projekcija točke na ravninu. Simetrična točka

točka: $M(1,2,3)$    ravnina: $2x+y-z-13=0$

In [70]:
rav=Plane(Point3D(7,0,1),(2,1,-1))
M=Point3D(1,2,3)
In [71]:
S=rav.projection(M)
S
Out[71]:
$\displaystyle Point3D\left(5, 4, 1\right)$

Simetrična točka točke $M$ s obzirom na zadanu ravninu.

In [72]:
S+M.direction_ratio(S)
Out[72]:
$\displaystyle Point3D\left(9, 6, -1\right)$

Ravnina koja prolazi danom točkom i paralelna je sa zadanom ravninom

točka: $T(1,-2,7)$    ravnina: $2x+3y-5z+10=0$

In [73]:
rav=Plane(Point3D(-5,0,0),(2,3,-5))
T=Point3D(1,-2,7)
In [74]:
rav_par=rav.parallel_plane(T)
rav_par
Out[74]:
$\displaystyle Plane\left(Point3D\left(1, -2, 7\right), \left( 2, \ 3, \ -5\right)\right)$
In [75]:
rav_par.equation()
Out[75]:
$\displaystyle 2 x + 3 y - 5 z + 39$

Ravnina koja prolazi danim točkama i okomita je na zadanu ravninu

točke: $T_1(1,0,-1),\,$ $T_2(0,2,5)$    ravnina: $2x+y-5z+6=0$

In [76]:
rav=Plane(Point3D(-3,0,0),(2,1,-5))
T1=Point3D(1,0,-1)
T2=Point3D(0,2,5)
In [77]:
rav_perp=rav.perpendicular_plane(T1,T2)
rav_perp
Out[77]:
$\displaystyle Plane\left(Point3D\left(1, 0, -1\right), \left( -16, \ 7, \ -5\right)\right)$
In [78]:
rav_perp.equation()
Out[78]:
$\displaystyle - 16 x + 7 y - 5 z + 11$

Pramen ravnina

Ravnine $2x-y+3z-5=0,$ $x+y-z+1=0$ i $3x+2y-4z-3=0$ ne pripadaju istom pramenu.

In [79]:
rav1=Plane(Point3D(0,-5,0),(2,-1,3))
rav2=Plane(Point3D(0,0,1),(1,1,-1))
rav3=Plane(Point3D(1,0,0),(3,2,-4))
In [80]:
Plane.are_concurrent(rav1,rav2,rav3)
Out[80]:
False

Pravac se zadaje pomoću dvije različite točke

In [81]:
A=Point3D(2,3,-1)
B=Point3D(1,0,8)
pravac=Line3D(A,B)
In [82]:
pravac
Out[82]:
$\displaystyle Line3D\left(Point3D\left(2, 3, -1\right), Point3D\left(1, 0, 8\right)\right)$
In [83]:
pravac.p1
Out[83]:
$\displaystyle Point3D\left(2, 3, -1\right)$
In [84]:
pravac.p2
Out[84]:
$\displaystyle Point3D\left(1, 0, 8\right)$

vektor smjera pravca

In [85]:
pravac.direction
Out[85]:
$\displaystyle Point3D\left(-1, -3, 9\right)$
In [86]:
pravac.direction_ratio
Out[86]:
$\displaystyle \left[ -1, \ -3, \ 9\right]$

Pripadni jedinični vektor smjera pravca

In [87]:
pravac.direction_cosine
Out[87]:
$\displaystyle \left[ - \frac{\sqrt{91}}{91}, \ - \frac{3 \sqrt{91}}{91}, \ \frac{9 \sqrt{91}}{91}\right]$

Pravac prikazan kao presjek dvije ravnine

In [88]:
pravac.equation()
Out[88]:
$\displaystyle \left( - 3 x + y + 3, \ 9 x + z - 17\right)$

Neka slučajna točka na pravcu

In [89]:
ranT=pravac.random_point()
In [90]:
ranT
Out[90]:
$\displaystyle Point3D\left(\frac{39341778757571017}{18014398509481984}, \frac{63982140744267099}{18014398509481984}, - \frac{47831234156945425}{18014398509481984}\right)$

Koordinate slučajne točke zaokružene na 5 znamenaka

In [91]:
ranT.n(5)
Out[91]:
$\displaystyle Point3D\left(2.1839, 3.5517, -2.6552\right)$

Neka druga slučajna točka na pravcu

In [92]:
ranT2=pravac.random_point(32)
ranT2.n(5)
Out[92]:
$\displaystyle Point3D\left(1.3872, 1.1615, 4.5156\right)$

Parametarske jednadžbe pravca

In [93]:
par=pravac.arbitrary_point(u)
par
Out[93]:
$\displaystyle Point3D\left(2 - u, 3 - 3 u, 9 u - 1\right)$

Točka na pravcu koja se dobije za $u=-2$

In [94]:
Tp=par.subs({u:-2})
Tp
Out[94]:
$\displaystyle Point3D\left(4, 9, -19\right)$

Dobivanje parametra za danu točku koja leži na pravcu

In [95]:
pravac.parameter_value(Tp,u)
Out[95]:
$\displaystyle \left\{ u : -2\right\}$

Udaljenost točke od pravca

točka: $T(2,1,3)$    pravac: $\frac{x-1}{1}=\frac{y-1}{2}=\frac{z-1}{3}$

In [96]:
pravac=Line3D(Point3D(1,1,1),Point3D(0,-1,-2))
T=Point3D(2,1,3)
In [97]:
d=pravac.distance(T)
d
Out[97]:
$\displaystyle \frac{\sqrt{6}}{2}$
In [98]:
N(d)
Out[98]:
$\displaystyle 1.22474487139159$

Točka $T$ ne leži na zadanom pravcu.

In [99]:
pravac.contains(T)
Out[99]:
False

Međusobni položaj pravaca

$p_1\dotsc\dfrac{x-1}{8}=\dfrac{y+2}{-3}=\dfrac{z+1}{1},\qquad p_2\dotsc\dfrac{x-6}{2}=\dfrac{y+3}{1}=\dfrac{z-1}{3}$

In [100]:
p1=Line3D(Point3D(1,-2,-1),Point3D(9,-5,0))
p2=Line3D(Point3D(6,-3,1),Point3D(8,-2,4))

U ovom slučaju se kut između vektora smjerova podudara s kutom između pravaca jer smo dobili arkus kosinus od pozitivnog broja.

In [101]:
kut=p1.angle_between(p2)
kut
Out[101]:
$\displaystyle \operatorname{acos}{\left(\frac{8 \sqrt{259}}{259} \right)}$

Kut između pravaca u radijanima

In [102]:
kr=N(kut)
kr
Out[102]:
$\displaystyle 1.05054778388236$

Kut između pravaca u stupnjevima

In [103]:
ks=N(kut*180/pi)
ks
Out[103]:
$\displaystyle 60.1919541932807$

Pravci su različiti.

In [104]:
p1.contains(p2)
Out[104]:
False

Pravci nisu paralelni.

In [105]:
p1.is_parallel(p2)
Out[105]:
False

Pravci nisu okomiti.

In [106]:
p1.is_perpendicular(p2)
Out[106]:
False

Pravci se sijeku u točki $S\big(5,-\frac{7}{2},-\frac{1}{2}\big)$

In [107]:
p1.intersection(p2)
Out[107]:
$\displaystyle \left[ Point3D\left(5, - \frac{7}{2}, - \frac{1}{2}\right)\right]$

Ortogonalna projekcija točke na pravac. Simetrična točka

točka: $A(6,1,-5)$    pravac: $\frac{x-2}{3}=\frac{y+4}{1}=\frac{z-2}{-1}$

In [108]:
pravac=Line3D(Point3D(2,-4,2),Point3D(5,-3,1))
A=Point3D(6,1,-5)
In [109]:
S=pravac.projection(A)
S
Out[109]:
$\displaystyle Point3D\left(\frac{94}{11}, - \frac{20}{11}, - \frac{2}{11}\right)$

okomita dužina iz točke $A$ na zadani pravac

In [110]:
pravac.perpendicular_segment(A)
Out[110]:
$\displaystyle Segment3D\left(Point3D\left(6, 1, -5\right), Point3D\left(\frac{94}{11}, - \frac{20}{11}, - \frac{2}{11}\right)\right)$

normala iz točke $A$ na zadani pravac

In [111]:
pravac.perpendicular_line(A)
Out[111]:
$\displaystyle Line3D\left(Point3D\left(6, 1, -5\right), Point3D\left(\frac{94}{11}, - \frac{20}{11}, - \frac{2}{11}\right)\right)$

Simetrična točka točke $A$ s obzirom na zadani pravac.

In [112]:
S+A.direction_ratio(S)
Out[112]:
$\displaystyle Point3D\left(\frac{122}{11}, - \frac{51}{11}, \frac{51}{11}\right)$

Pravac koji prolazi točkom $A$ i paralelan je sa zadanim pravcem

In [113]:
pravac.parallel_line(A)
Out[113]:
$\displaystyle Line3D\left(Point3D\left(6, 1, -5\right), Point3D\left(9, 2, -6\right)\right)$

Djelišni omjer

In [114]:
A=Point3D(1,2,3)
B=Point3D(4,0,-5)
S=Point3D(37/16,9/8,-1/2)

Točka $S$ pripada dužini $\overline{AB}$

In [115]:
AB=Segment3D(A,B)
AB
Out[115]:
$\displaystyle Segment3D\left(Point3D\left(1, 2, 3\right), Point3D\left(4, 0, -5\right)\right)$
In [116]:
AB.contains(S)
Out[116]:
True

$\dfrac{|AS|}{|BS|}=\dfrac{7}{9}$

In [117]:
A.distance(S)/B.distance(S)
Out[117]:
$\displaystyle \frac{7}{9}$

Zajednička normala mimosmjernih pravaca

$p_1\dotsc\dfrac{x+2}{3}=\dfrac{y-7}{-4}=\dfrac{z-2}{4},\qquad p_2\dotsc\dfrac{x+5}{-1}=\dfrac{y}{1}=\dfrac{z+3}{5}$

In [118]:
p1=Line3D(Point3D(-2,7,2),Point3D(1,3,6))
p2=Line3D(Point3D(-5,0,-3),Point3D(-6,1,2))

Pravci su mimosmjerni.

In [119]:
p1.is_parallel(p2)
Out[119]:
False
In [120]:
p1.intersection(p2)
Out[120]:
$\displaystyle \left[ \right]$

Vektori smjerova pravaca $p_1$ i $p_2$ kao matrice

In [121]:
s1=Matrix(p1.direction_ratio)
s2=Matrix(p2.direction_ratio)
In [122]:
s1,s2
Out[122]:
$\displaystyle \left( \left[\begin{matrix}3\\-4\\4\end{matrix}\right], \ \left[\begin{matrix}-1\\1\\5\end{matrix}\right]\right)$

Vektor smjera zajedničke normale

In [123]:
nor=s1.cross(s2)
nor
Out[123]:
$\displaystyle \left[\begin{matrix}-24\\-19\\-1\end{matrix}\right]$

Ravnina $\pi_1$

In [124]:
nor_pi1=s1.cross(nor)
nor_pi1
Out[124]:
$\displaystyle \left[\begin{matrix}80\\-93\\-153\end{matrix}\right]$
In [125]:
pi1=Plane(Point3D(-2,7,2),nor_pi1)
pi1
Out[125]:
$\displaystyle Plane\left(Point3D\left(-2, 7, 2\right), \left( 80, \ -93, \ -153\right)\right)$
In [126]:
pi1.equation()
Out[126]:
$\displaystyle 80 x - 93 y - 153 z + 1117$

Ravnina $\pi_2$

In [127]:
nor_pi2=s2.cross(nor)
nor_pi2
Out[127]:
$\displaystyle \left[\begin{matrix}94\\-121\\43\end{matrix}\right]$
In [128]:
pi2=Plane(Point3D(-5,0,-3),nor_pi2)
pi2
Out[128]:
$\displaystyle Plane\left(Point3D\left(-5, 0, -3\right), \left( 94, \ -121, \ 43\right)\right)$
In [129]:
pi2.equation()
Out[129]:
$\displaystyle 94 x - 121 y + 43 z + 599$
Zajednička normala kao presjek ravnina $\pi_1$ i $\pi_2$
In [130]:
normala=pi1.intersection(pi2)[0]
normala
Out[130]:
$\displaystyle Line3D\left(Point3D\left(- \frac{5675}{67}, - \frac{4077}{67}, 0\right), Point3D\left(- \frac{1513979}{67}, - \frac{1198151}{67}, -938\right)\right)$

Nožišta zajedničke normale na pravcima $p_1$ i $p_2$

$N_1\left(-\frac{59}{67},\frac{369}{67},\frac{234}{67}\right)\qquad$ $N_2\left(-\frac{419}{67}, \frac{84}{67}, \frac{219}{67}\right)$

In [131]:
N1=normala.intersection(p1)[0]
N1
Out[131]:
$\displaystyle Point3D\left(- \frac{59}{67}, \frac{369}{67}, \frac{234}{67}\right)$
In [132]:
N2=normala.intersection(p2)[0]
N2
Out[132]:
$\displaystyle Point3D\left(- \frac{419}{67}, \frac{84}{67}, \frac{219}{67}\right)$
Udaljenost mimosmjernih pravaca
In [133]:
d=N1.distance(N2)
d
Out[133]:
$\displaystyle \frac{15 \sqrt{938}}{67}$
In [134]:
N(d)
Out[134]:
$\displaystyle 6.85674305870756$

Međusobni položaj pravca i ravnine

$p\dotsc\dfrac{x+1}{2}=\dfrac{y}{1}=\dfrac{z}{-1},\qquad \Pi\dotsc x+2y-2z-5=0$

In [135]:
pravac=Line3D(Point3D(-1,0,0),Point3D(1,1,-1))
ravnina=Plane(Point3D(5,0,0),(1,2,-2))

U ovom slučaju se kut između normale ravnine i vektora smjera pravca podudara s kutom između pravca i ravnine jer smo dobili arkus sinus od pozitivnog broja.

In [136]:
kut=ravnina.angle_between(pravac)
kut
Out[136]:
$\displaystyle \operatorname{asin}{\left(\frac{\sqrt{6}}{3} \right)}$

kut u radijanima

In [137]:
N(kut)
Out[137]:
$\displaystyle 0.955316618124509$

kut u stupnjevima

In [138]:
N(kut*180/pi)
Out[138]:
$\displaystyle 54.7356103172453$

U slučaju negativnog predznaka, vektor smjera pravca i normala ravnine zatvaraju tupi kut. Kut između pravca i ravnine je tada jednak apsolutnoj vrijednosti tog broja, tj. zaboravimo negativni predznak.

In [139]:
pravac2=Line3D(Point3D(1,1,-1),Point3D(-1,0,0))
In [140]:
kut=ravnina.angle_between(pravac2)
kut
Out[140]:
$\displaystyle - \operatorname{asin}{\left(\frac{\sqrt{6}}{3} \right)}$

kut između vektora smjera pravca i normale ravnine u radijanima

In [141]:
kr=N(kut+pi)
kr
Out[141]:
$\displaystyle 2.18627603546528$

kut između vektora smjera pravca i normale ravnine u stupnjevima

In [142]:
N(kr*180/pi)
Out[142]:
$\displaystyle 125.264389682755$

kut između pravca i ravnine u radijanima

In [143]:
kr=N(Abs(kut))
kr
Out[143]:
$\displaystyle 0.955316618124509$

kut između pravca i ravnine u stupnjevima

In [144]:
N(kr*180/pi)
Out[144]:
$\displaystyle 54.7356103172453$

Pravac i ravnina nisu paralelni.

In [145]:
ravnina.is_parallel(pravac)
Out[145]:
False

Pravac i ravnina nisu okomiti.

In [146]:
ravnina.is_perpendicular(pravac)
Out[146]:
False

Pravac i ravnina se sijeku u točki $S(1,1,-1)$.

In [147]:
ravnina.intersection(pravac)
Out[147]:
$\displaystyle \left[ Point3D\left(1, 1, -1\right)\right]$

Ortogonalna projekcija pravca na ravninu. Simetrični pravac

$p\dotsc\dfrac{x+1}{2}=\dfrac{y}{1}=\dfrac{z}{-1},\qquad \Pi\dotsc x+2y-2z-5=0$

In [148]:
pravac=Line3D(Point3D(-1,0,0),Point3D(1,1,-1))
ravnina=Plane(Point3D(5,0,0),(1,2,-2))

Ortogonalna projekcija pravca na ravninu

In [149]:
orto_pr=ravnina.projection_line(pravac)
orto_pr
Out[149]:
$\displaystyle Line3D\left(Point3D\left(- \frac{1}{3}, \frac{4}{3}, - \frac{4}{3}\right), Point3D\left(1, 1, -1\right)\right)$

Parametarske jednadžbe ortogonalne projekcije pravca $p$ na ravninu $\Pi$

In [150]:
orto_pr.arbitrary_point(u)
Out[150]:
$\displaystyle Point3D\left(\frac{4 u}{3} - \frac{1}{3}, \frac{4}{3} - \frac{u}{3}, \frac{u}{3} - \frac{4}{3}\right)$

Parametarske jednadžbe simetričnog pravca od pravca $p$ s obzirom na ravninu $\Pi$

In [151]:
S=ravnina.intersection(pravac)[0]
ortT=ravnina.projection(pravac.p1)
simT=ortT+(pravac.p1).direction_ratio(ortT)
In [152]:
sim_pr=Line3D(S,simT)
sim_pr.arbitrary_point(u)
Out[152]:
$\displaystyle Point3D\left(1 - \frac{2 u}{3}, \frac{5 u}{3} + 1, - \frac{5 u}{3} - 1\right)$

Pravac koji prolazi točkom $T(-1,0,0)$ i okomit je na ravninu $\Pi$

In [153]:
okomica=ravnina.perpendicular_line(Point3D(-1,0,0))
okomica
Out[153]:
$\displaystyle Line3D\left(Point3D\left(-1, 0, 0\right), Point3D\left(0, 2, -2\right)\right)$
In [154]:
okomica.arbitrary_point(u)
Out[154]:
$\displaystyle Point3D\left(u - 1, 2 u, - 2 u\right)$

Zadatak

Napišite jednadžbu ravnine koja prolazi točkom $B(-1,2,-4)$, a okomita je na ravnine $\Pi_1\dotsc x+3y-2z+5=0$ i $\Pi_2\dotsc -4x+5y-z+3=0$.

Rješenje

In [155]:
B=Point3D(-1,2,-4)
nor1=Matrix([1,3,-2])
nor2=Matrix([-4,5,-1])
In [156]:
nor3=nor1.cross(nor2)
nor3
Out[156]:
$\displaystyle \left[\begin{matrix}7\\9\\17\end{matrix}\right]$
In [157]:
tuple(nor3)
Out[157]:
$\displaystyle \left( 7, \ 9, \ 17\right)$

Tražena ravnina: $7x+9y+17z+57=0$

In [158]:
rav=Plane(B,nor3)
rav.equation()
Out[158]:
$\displaystyle 7 x + 9 y + 17 z + 57$

Zadatak

Za koju vrijednost parametra $a\in\mathbb{R}$ se sijeku pravci $p_1\dotsc\frac{x-a}{4}=\frac{y-2}{3}=\frac{z}{1}$ i $p_2\dotsc\frac{x+3}{-1}=\frac{y+a}{5}=\frac{z+1}{1}$. Odredite u tom slučaju jednadžbu ravnine koja sadrži pravce $p_1$ i $p_2$.

Rješenje

In [159]:
a=var('a')
s1=Matrix([4,3,1])
s2=Matrix([-1,5,1])
T1=Matrix([a,2,0])
T2=Matrix([-3,-a,-1])
vek=T2-T1

Uvjet komplanarnosti pravaca

In [160]:
uvjet=vek.cross(s1).dot(s2)
uvjet
Out[160]:
$\displaystyle 7 a - 7$

Pravci su komplanarni jedino za $a=1$.

In [161]:
solve(uvjet,a)
Out[161]:
$\displaystyle \left[ 1\right]$
In [162]:
T1=Point3D(T1).subs({a:1})
T2=Point3D(T2).subs({a:1})
T1,T2
Out[162]:
$\displaystyle \left( Point3D\left(1, 2, 0\right), \ Point3D\left(-3, -1, -1\right)\right)$

Ravnina $\pi$ koja sadrži pravce $p_1$ i $p_2$ prolazi npr. kroz točku $T_1$ i ima normalu $\vec{n}_{\pi}=\vec{s}_1\times\vec{s}_2$.

In [163]:
nor=s1.cross(s2)
nor
Out[163]:
$\displaystyle \left[\begin{matrix}-2\\-5\\23\end{matrix}\right]$

Jednadžba tražene ravnine: $-2x-5y+23z+12=0$

In [164]:
rav=Plane(T1,nor)
rav.equation()
Out[164]:
$\displaystyle - 2 x - 5 y + 23 z + 12$

Zadatak

Odredite vektor smjera pravca $q$ koji prolazi točkom $T(1,0,4)$ i siječe pravac $p\dotsc\frac{x-2}{1}=\frac{y-1}{-1}=\frac{z+1}{0}$ te je paralelan s ravninom $\Sigma\dotsc -2y+z-1=0$.

Rješenje

In [165]:
pravac=Line3D(Point3D(2,1,-1),Point3D(3,0,-1))
T=Point3D(1,0,4)
nor=Matrix([0,-2,1])

Neka je točka $S$ presjek pravaca $p$ i $q$.

In [166]:
t=var('t')
S=pravac.arbitrary_point(t)
ST=S.direction_ratio(T)
ST
Out[166]:
$\displaystyle \left[ - t - 1, \ t - 1, \ 5\right]$

Kako je pravac $q$ paralelan s ravninom $\Sigma$, mora vrijediti $\overrightarrow{ST}\cdot\vec{n}_{\Sigma}=0$.

In [167]:
sp=Matrix(ST).dot(nor)
sp
Out[167]:
$\displaystyle 7 - 2 t$
In [168]:
rj=solve(sp,t)
rj
Out[168]:
$\displaystyle \left[ \frac{7}{2}\right]$

Možemo uzeti $\vec{s}_{q}=2\cdot\overrightarrow{ST}=(-9,5,10)$

In [169]:
2*Matrix(ST).subs({t:rj[0]})
Out[169]:
$\displaystyle \left[\begin{matrix}-9\\5\\10\end{matrix}\right]$

Zadatak

Zraka svjetlosti prolazi točkom $T(-2,-1,1)$ i kreće se u smjeru vektora $\vec{v}=(-1,0,-1)$ te se reflektira na ravnini $\Pi_1\dotsc x+y-2z=0$. U kojoj točki reflektirana zraka siječe ravninu $\Pi_2\dotsc x+y+z+18=0$?

Rješenje

In [170]:
T=Point3D(-2,-1,1)
vek=Point3D(-1,0,-1)
zraka=Line3D(T,T+vek)
pi1=Plane(Point3D(0,0,0),(1,1,-2))
pi2=Plane(Point3D(-18,0,0),(1,1,1))

Točka $S(-7,-1,-4)$ je presjek zrake i ravnine $\pi_1$.

In [171]:
S=pi1.intersection(zraka)[0]
S
Out[171]:
$\displaystyle Point3D\left(-7, -1, -4\right)$

Zraka siječe ravninu jer je $t>0$. Zraka je polupravac pa moramo poštivati i orijentaciju vektora $\vec{v}$.

In [172]:
zraka.parameter_value(S,t)
Out[172]:
$\displaystyle \left\{ t : 5\right\}$

Neka je $q$ pravac okomit na ravninu $\Pi_1$ koji prolazi kroz točku $S$. Neka je $P$ ortogonalna projekcija točke $T$ na pravac $q$.

In [173]:
okomica=pi1.perpendicular_line(S)
P=okomica.projection(T)
P
Out[173]:
$\displaystyle Point3D\left(- \frac{47}{6}, - \frac{11}{6}, - \frac{7}{3}\right)$

Neka je $T'$ simetrična točka točke $T$ s obzirom na pravac $q$.

In [174]:
Tc=P+T.direction_ratio(P)
Tc
Out[174]:
$\displaystyle Point3D\left(- \frac{41}{3}, - \frac{8}{3}, - \frac{17}{3}\right)$

Reflektirana zraka je polupravac s početkom u točki $S$ koji prolazi točkom $T'$. Reflektirana zraka siječe ravninu $\Pi_2$ u točki $S'(-11,-2,-5)$.

In [175]:
reflektirana_zraka=Line3D(S,Tc)
Sc=pi2.intersection(reflektirana_zraka)[0]
Sc
Out[175]:
$\displaystyle Point3D\left(-11, -2, -5\right)$

Reflektirana zraka siječe ravninu $\Pi_2$ jer je $t>0$.

In [176]:
reflektirana_zraka.parameter_value(Sc,t)
Out[176]:
$\displaystyle \left\{ t : \frac{3}{5}\right\}$
In [ ]: