#! /usr/bin/env python3
# -*- coding: UTF-8 -*- 
##############################
# pythontips3.py
# Numerisk løsning av Newtons 2. lov. (Forward Euler.)
# Her: For en kloss som glir på et skråplan.
##############################
# Importerer nødvendige funksjoner fra numpy og matplotlib
from numpy import pi,sin,cos,zeros
from matplotlib.pyplot import figure,title,xlabel,ylabel,plot,show,rc,grid

# Parametre:
g=9.81        # tyngdens akselerasjon (m/s^2)
dt=0.01       # tidssteg (s)
m=1.00        # klossens masse (kg)
myk=0.2       # kinetisk friksjonskoeffisient
phi=16*pi/180 # skråplan med helningsvinkel 16 grader
# Velger positiv retning oppover skråplanet.
# N2 oppover: -m*g*sin(phi) - f = m*a
# N2 nedover: -m*g*sin(phi) + f = m*a
# Normalkraft: n = m*g*cos(phi)
# Friksjonskraft: f = myk*n
n = m*g*cos(phi)
f = myk*n
aopp = (-m*g*sin(phi)-f)/m
aned = (-m*g*sin(phi)+f)/m
# Initialisering av tabeller:
t=zeros(100)
x=zeros(100)
v=zeros(100)
# Startverdier:
t[0] = 0.0     # Starttid
x[0] = 0.0     # Startposisjon
v[0] = 1.0     # Starthastighet 1.0 m/s

# Fortsetter while-loopen inntil klossen er tilbake ved x=0.0.
j=0   # Heltall for antall tidssteg; t(j) = dt*j
# Vi integrerer bevegelsesligningen
while (x[j] >= 0.0):
  x[j+1] = x[j] + v[j]*dt  #ny posisjon
  if (v[j] > 0):
     v[j+1] = v[j] + aopp*dt   # ny fart, på vei oppover
  else:
     v[j+1] = v[j] + aned*dt   # ny fart, på vei nedover
  
  t[j+1] = t[j] + dt # ny tid
  j = j+1            # nytt tidssteg

# Plotter x(t)
figure('Figur 1')
title('Figur 1. Klossens posisjon på skråplanet')
xlabel(r'Tid (s)')
ylabel(r'Posisjon (m)')
plot(t[0:j],x[0:j])
grid()
show()

# Plotter v(t)
figure('Figur 2')
title('Figur 2. Klossens hastighet på skråplanet')
xlabel(r'Tid (s)')
ylabel(r'Hastighet (m/s)')
plot(t[0:j],v[0:j])
grid()
show()

