Skip to content

Instantly share code, notes, and snippets.

@VitorDiToro
Last active November 15, 2016 00:46
Show Gist options
  • Save VitorDiToro/dad64315f3912524230249050ab46e62 to your computer and use it in GitHub Desktop.
Save VitorDiToro/dad64315f3912524230249050ab46e62 to your computer and use it in GitHub Desktop.
import numpy as np
import matplotlib.pyplot as plt
import math
import os
def inelastica(ma,va1,mb,vb1):
'''
+-----------------------------------------------+
Explicação das Variáveis
+-----------------------------------------------+
ma -> Massa do corpo A.
va1 -> Velocidade do corpo A antes da colisao.
ea1 -> Energia do corpo A antes da colisao.
mb -> Massa do copo B.
vb1 -> Velocidade do corpo B antes da colisão.
eb1 -> Energia do corpo B antes da colisao.
vf -> Velocidade final, apos a colisao
mf -> Massa final, apos a colisao
ef -> Energia final, apos a colisao
+-----------------------------------------------+
'''
print('====== Simulacao de colisao inelastica =====')
vf = (ma * va1 + mb * vb1)/(ma + mb)
ea1 = abs(va1 * ma)
eb1 = abs(vb1 * mb)
mf = ma + mb
ef = abs(vf * mf)
print("Velocidade Inicial: ")
print("A = ", va1)
print("B = ", vb1)
print("Velocidade final: ")
print("(AB) = ", vf)
print("")
print("Energia Inicial: ")
print("A = ", ea1)
print("B = ", eb1)
print("Energia Final: " )
print("AB = ", ef)
"""==========="""
""" Grafico 3 """
"""==========="""
plt.subplot(2,2,3)
XA = [0]
YA = [va1]
XB = [1]
YB = [vb1]
XC = [2]
YC = [vf]
""" Encontra o valor MAX e o valor MIN """
vmin = min(0,va1,vb1,vf)
vmax = max(0,va1,vb1,vf)
""" Desenha o Grafico """
plt.bar(XA, YA, facecolor='#9999ff', edgecolor='white')
plt.bar(XB, YB, facecolor='#ff9999', edgecolor='white')
plt.bar(XC, YC, facecolor='#FF9933', edgecolor='white')
""" Adiciona as informacoes """
""" Valores """
plt.text(0.4, va1 - 0.15 - max((-vmin),vmax)*0.10 if va1 < 0 else va1 + 0.1, '%.2f m/s' % va1, ha='center', va='bottom')
plt.text(1.4, vb1 - 0.15 - max((-vmin),vmax)*0.10 if vb1 < 0 else vb1 + 0.1, '%.2f m/s' % vb1, ha='center', va='bottom')
plt.text(2.4, vf - 0.15 - max((-vmin),vmax)*0.10 if vf < 0 else vf + 0.1, '%.2f m/s' % vf, ha='center', va='bottom')
""" Nomes """
plt.text(0.4, 0 if va1 <= 0 else (- vmax * 0.02), 'V0 de A', ha='center', va='bottom' if va1 < 0 else 'top')
plt.text(1.4, 0 if vb1 <= 0 else (- vmax * 0.02), 'V0 de B', ha='center', va='bottom' if vb1 < 0 else 'top')
plt.text(2.4, 0 if vf <= 0 else (- vmax * 0.02), 'Vf de (AB)', ha='center', va='bottom' if vf < 0 else 'top')
""" Define a dimensao da 'folha' """
if vmin < 0:
if (va1 < 0) & (vb1 < 0) & (vf < 0): #Todas as velocidades negativas
plt.ylim(vmin+(vmin * 0.20), -vmin * 0.16)
else:
plt.ylim(vmin-(vmax * 0.25), vmax * 1.3)
else:
plt.ylim(vmin-(vmax * 0.12), vmax * 1.16)
plt.xlim(-0.25, 3.05)
""" Remove o eixo X """
plt.xticks(())
"""==========="""
""" Grafico 4 """
"""==========="""
plt.subplot(2,2,4)
XA = [0]
YA = [ea1]
XB = [1]
YB = [eb1]
XC = [2]
YC = [ef]
""" Encontra o valor MAX e o valor MIN """
vmin = min(0,ea1,eb1,ef)
vmax = max(0,ea1,eb1,ef)
""" Desenha o Grafico """
plt.bar(XA, YA, facecolor='#99ff66', edgecolor='white')
plt.bar(XB, YB, facecolor='#FFFF66', edgecolor='white')
plt.bar(XC, YC, facecolor='#CC6699', edgecolor='white')
""" Adiciona as informacoes """
""" Valores """
plt.text(0.4, ea1 + 0.1, '%.2f J' % ea1, ha='center', va='bottom')
plt.text(1.4, eb1 + 0.1, '%.2f J' % eb1, ha='center', va='bottom')
plt.text(2.4, ef + 0.1, '%.2f J' % ef, ha='center', va='bottom')
""" Nomes """
plt.text(0.4, (- vmax * 0.02), 'Ec0 de A', ha='center', va='top')
plt.text(1.4, (- vmax * 0.02), 'Ec0 de B', ha='center', va='top')
plt.text(2.4, (- vmax * 0.02), 'EcF de (AB)', ha='center', va='top')
""" Define a dimensao da 'folha' """
plt.ylim(vmin-(vmax * 0.12), vmax * 1.16)
plt.xlim(-0.25, 3.05)
""" Remove o eixo X """
plt.xticks(())
def elastica(ma,va1,mb,vb1):
'''
+-----------------------------------------------+
Explicação das Variáveis
+-----------------------------------------------+
ma -> Massa do corpo A.
va1 -> Velocidade do corpo A antes da colisao.
va2 -> Velocidade do corpo A depois da colisao.
ea1 -> Energia do corpo A antes da colisao.
ea2 -> Energia do compo A depois da colisao.
mb -> Massa do copo B.
vb1 -> Velocidade do corpo B antes da colisão.
vb2 -> Velocidade do corpo B depois da colisao.
eb1 -> Energia do corpo B antes da colisao.
eb2 -> Energia do corpo B depois da colisao.
+-----------------------------------------------+
'''
""" Fonte: http://www.infoescola.com/fisica/colisao-elastica/ """
va2 = (ma - mb)/(ma + mb) * va1 + (2*mb / (ma+mb)) * vb1
vb2 = (ma - mb)/(ma + mb) * vb1 + (2*ma / (ma+mb)) * va1
ea1 = abs(ma*va1)
ea2 = abs(ma*va2)
eb1 = abs(mb*vb1)
eb2 = abs(mb*vb2)
print('====== Simulacao de colisao elastica =====')
print("Velocidade inicial:")
print("A =", va1)
print("B =", vb1)
print("Velocidade final:")
print("A =", va2)
print("B =", vb2)
print("")
print("Evergia inicial:")
print("A =", ea1 )
print("B =", eb1)
print("Energia final:")
print("A =", ea2)
print("B =", eb2)
print("")
"""==========="""
""" Grafico 1 """
"""==========="""
plt.subplot(2,2,1)
XA = [0,1]
YA = [va1, va2]
XB = [2,3]
YB = [vb1, vb2]
""" Encontra o valor MAX e o valor MIN """
vmin = min(0,va1,va2,vb1,vb2)
vmax = max(0,va1,va2,vb1,vb2)
""" Desenha o Grafico """
plt.bar(XA, YA, facecolor='#9999ff', edgecolor='white')
plt.bar(XB, YB, facecolor='#ff9999', edgecolor='white')
""" Adiciona as informacoes """
""" Valores """
plt.text(0.4, va1 - 0.15 - max((-vmin),vmax)*0.10 if va1 < 0 else va1 + 0.1, '%.2f m/s' % va1, ha='center', va='bottom')
plt.text(1.4, va2 - 0.15 - max((-vmin),vmax)*0.10 if va2 < 0 else va2 + 0.1, '%.2f m/s' % va2, ha='center', va='bottom')
plt.text(2.4, vb1 - 0.15 - max((-vmin),vmax)*0.10 if vb1 < 0 else vb1 + 0.1, '%.2f m/s' % vb1, ha='center', va='bottom')
plt.text(3.4, vb2 - 0.15 - max((-vmin),vmax)*0.10 if vb2 < 0 else vb2 + 0.1, '%.2f m/s' % vb2, ha='center', va='bottom')
""" Nomes """
plt.text(0.4, 0 if va1 <=0 else (- vmax * 0.02), 'V0 de A', ha='center', va='bottom' if va1 < 0 else 'top')
plt.text(1.4, 0 if va2 <=0 else (- vmax * 0.02), 'Vf de A', ha='center', va='bottom' if va2 < 0 else 'top')
plt.text(2.4, 0 if vb1 <=0 else (- vmax * 0.02), 'V0 de B', ha='center', va='bottom' if vb1 < 0 else 'top')
plt.text(3.4, 0 if vb2 <=0 else (- vmax * 0.02), 'Vf de B', ha='center', va='bottom' if vb2 < 0 else 'top')
""" Define a dimensao da 'folha' """
if vmin < 0:
if (va1 < 0) & (va2 < 0) & (vb1 < 0) & (vb2 < 0):
plt.ylim(vmin+(vmin * 0.20), -vmin * 0.16) # Se todos os valores forem negativos
else:
plt.ylim(vmin-(vmax * 0.25), vmax * 1.3) # Se existir valores negativos
else:
plt.ylim(vmin-(vmax * 0.12), vmax * 1.16) # Se todos os valores forem positivos
plt.xlim(-0.25, 4.05)
""" Remove o eixo X"""
plt.xticks(())
"""==========="""
""" Grafico 2 """
"""==========="""
plt.subplot(2,2,2)
XA = [0,1]
YA = [ea1, ea2]
XB = [2,3]
YB = [eb1, eb2]
""" Encontra o valor MAX e o valor MIN """
vmin = min(0,ea1,ea2,eb1,eb2)
vmax = max(0,ea1,ea2,eb1,eb2)
""" Desenha o Grafico """
plt.bar(XA, YA, facecolor='#99ff66', edgecolor='white')
plt.bar(XB, YB, facecolor='#FFFF66', edgecolor='white')
""" Adiciona as informacoes """
plt.text(0.4, ea1 + 0.1, '%.2f J' % ea1, ha='center', va='bottom')
plt.text(1.4, ea2 + 0.1, '%.2f J' % ea2, ha='center',va='bottom')
plt.text(2.4, eb1 + 0.1, '%.2f J' % eb1, ha='center', va='bottom')
plt.text(3.4, eb2 + 0.1, '%.2f J' % eb2, ha='center', va='bottom')
plt.text(0.4, (- vmax * 0.02), 'Ec0 de A', ha='center', va='top')
plt.text(1.4, (- vmax * 0.02), 'Ecf de A', ha='center', va='top')
plt.text(2.4, (- vmax * 0.02), 'Ec0 de B', ha='center', va='top')
plt.text(3.4, (- vmax * 0.02), 'Ecf de B', ha='center', va='top')
""" Define a dimensao da 'folha' """
plt.ylim(vmin-(vmax * 0.12), vmax * 1.16)
plt.xlim(-0.25, 4.05)
""" Remove o eixo X """
plt.xticks(())
def main():
ma = float(input("Informe a massa do corpo A: "))
va = float(input("Informe a velocidade do corpo A: "))
mb = float(input("Informe a massa do corpo B: "))
vb = float(input("Informe a velocidade do corpo B: "))
elastica(ma,va,mb,vb)
inelastica(ma,va,mb,vb)
plt.show()
if __name__ == '__main__':
main()
Abra o CMD e instala as dependencias a baixo.
NUMPY -> pip install numpy
matplotlib -> pip install matplotlib
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment