Last active
November 15, 2016 00:46
-
-
Save VitorDiToro/dad64315f3912524230249050ab46e62 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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