In [1]:
from numpy import array, cross, dot
Primero determinemos el vector posición $\vec{r_{1}}$, $\vec{r_{2}}$ y $\vec{r_{3}}$ de cada punto:
In [2]:
r1 = array([2,-1,1])
In [3]:
r2 = array([3,2,-1])
In [4]:
r3 = array([-1,3,2])
Posteriormente se determina una base vectorial en el plano por medio de los vectores:
$\vec{A}=\vec{r_{2}}-\vec{r_{1}}$ y $\vec{B}=\vec{r_{3}}-\vec{r_{1}}$
In [5]:
A = r2 - r1
In [6]:
B = r3 - r1
In [7]:
print A, B
Via producto cruz se determina el vector normal al plano
$$ \vec{N} = \vec{A} \times \vec{B} $$
In [8]:
N = cross(A,B)
In [9]:
print N
Con este vector la ecuación general del plano será:
$$Ax + By + Cz + D = 0$$Donde $A$, $B$, $C$ son las componentes de $\vec{N}$ y D es una constante por evaluar.
Para ello en la ecuación del plano reemplazamos las coordenadas del punto $P_1$, por ejemplo. Así el valor de D, podría construirse como el negativo producto punto entre $\vec{N}$ y el vector $\vec{r_1}$
In [10]:
D=array([0,0,0])
D = -dot(N,r1)
In [11]:
print D
De esta forma, la ecuación de plano es:
In [12]:
N = str(N[0]) + 'x + ' + str(N[1]) + 'y + ' + str(N[2]) + 'z = ' + str(-D)
In [13]:
print N
In [14]:
from IPython.core.display import HTML
def css_styling():
styles = open('./custom_barba.css', 'r').read()
return HTML(styles)
css_styling()
Out[14]: