from IPython.display import Image,Latex

"""
Explanation: Ejemplo 2. Estática
End of explanation
"""


Image(filename='FIGURES/Rampa.png',width=250)

"""
Explanation: Por medio de un par de cables se quiere sostener un bloque de peso $W = 200\; kgf$. Determine la tensión en cada cuerda si las coordenadas de posición de los puntos A, B, C son A(0, -20 cm, 40 cm), B(-40 cm, 50 cm, 0cm)  y C(45 cm, 40 cm, 0cm), respectivamente. Suponga que no hay fricción entre la rampa y el contrapeso.
End of explanation
"""


from numpy import array, sqrt, cross, dot, arctan, cos, sin
from scipy.linalg import inv

R_AB = [-40., 70., -40.]
MR_AB = sqrt(dot (R_AB,R_AB))
nB = R_AB / MR_AB
print 'Magnitud =', MR_AB, ',', 'nB =', nB.round(2)

"""
Explanation: Si llamamos $\vec{T_{B}}$ y $\vec{T_{C}}$ la tensión en el cable AB y AC (incógnitas) respectivamente, $\vec{W}$ el peso del elemento y $\vec{N}$ el vector normal al plano de la rampa, y hacemos equilibro sobre el bloque, se tiene:
$$ \begin{align}
&\sum \; F_{X} = T_{BX} + T_{CX} = 0\
&\sum \; F_{Y} = - W + T_{BY} + T_{CY} + N_{Y} = 0\
&\sum \; F_{Z} =  T_{BZ} + T_{CZ} + N_{Z} = 0
\end{align}$$
Por otro lado, los vectores de tensión pueden ser escritos como: 
$\vec{T} = T \; \hat{n} $ , donde $\hat{n}$ es un vector director unitario.  
De esta forma para la tensión en el cable AB:
$\vec{T_B} = T_B \; \hat{n_B} = T_B \;\frac{\vec{R_{AB}}}{MR_{AB}} $
End of explanation
"""


R_AC = [45., 60., -40.]
MR_AC = sqrt(dot (R_AC,R_AC))
nC = R_AC / MR_AC
print 'Magnitud =', MR_AC, ',', 'nC =', nC.round(2) 

"""
Explanation: y para el cable AC: 
$\vec{T_C} = T_C \; \hat{n_C} = T_C \;\frac{\vec{R_{AC}}}{MR_{AC}} $
End of explanation
"""


Np = [0.0, cos(arctan(40./80.)),sin(arctan(40./80.))]

"""
Explanation: Por analogía, la fuerza normal prodría N podría ser escrita como: 
$\vec{N} = N \; \hat{n_p} $, 
donde las componentes de $\hat{n_p} $ son determinadas por la inclinación de la rampa. De esta forma.
End of explanation
"""


A = array([[nB[0], nC[0], Np[0]], 
           [nB[1],nC[1], Np[1]],
           [nB[2], nC[2], Np[2]]])

B = [0.0, 200., 0]
print 'A=', A.round(2)
print 
print 'B=', B

"""
Explanation: Lo que queda ahora es resolver el sistema de ecuaciones de equilibrio. Para ello lo escribimos de la forma:
$$AX = B$$
End of explanation
"""


X = dot(inv(A),B)
print '[TB, TC, N]=', X.round(2)

"""
Explanation: Resolviendo el sistema
End of explanation
"""


from IPython.core.display import HTML
def css_styling():
    styles = open('./custom_barba.css', 'r').read()
    return HTML(styles)
css_styling()

"""
Explanation: Nota. Problema tomado de Mecánica Vectorial para Ingenieros. Estatica. Sexta Edición. Beer Ferninand;  Johnston, Russell.
End of explanation
"""


