Ejemplo 1. Determinar la ecuación del plano que pasa por 3 puntos

Esta es de la forma:

$ax+by+cz=d$


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


[ 1  3 -2] [-3  4  1]

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


[11  5 13]

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


-30

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


11x + 5y + 13z = 30

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]: