%% Koeficient reštitúcie
% Koeficient reštitúcie je definovaný ako C_r = u / v, kde v rýchlosť pred dopadom a u je rýchlosť po dopade.
%
%% Nastavenie parametrov

H_0 = 10; % metrov
V_0 = 25; % m/s
G = -9.8; % m/s^2
CR = .7; 

dt = .01;
T = 0:dt:20; % sekund
H = zeros(1, length(T)); % metrov
V = zeros(1, length(T)); % m/s

H(1) = H_0;
V(1:end) = V_0;

%% Simulovanie trajektórie

for i = 2:length(T)
    V(i) = V(i - 1) + G * dt;
    H(i) = H(i - 1) + V(i) * dt;
    
    % odraz
    if (H(i) <= 0)
        V(i) = -V(i) * CR;
        H(i) = 0;
    end
end

%% Vykreslenie pozície a rýchlosti lopty

plot(T, H)
title('Výška')
plot(T, V)
title('Rýchlosť')

%
%% Analytické riešenie problému
% S využitím Symbolic Math Toolboxu môžeme úlohu vyriešiť analyticky. To nám umožní riešiť niektoré problémi jednoduchšie, ako určenie presného času, kedy sa lopta prvý krát dotkla zeme.
% Deklarovanie symbolických premenných.

clear H
syms g t h_0 v_0 H(t)

% Rozdelenie diferenciálnej rovnice druhého rádu \frac{d^2h}{dt^2}=-g na \frac{dh}{dt}=v a \frac{dv}{dt}=-g.

Dh = diff(H);
D2h = diff(H,2) == g

% Vyriešenie ODE s využitím dsolve:

eqn = dsolve(D2h,H(0)==h_0, Dh(0)==v_0)

%
% Parametrické zobrazenie profilu pohybu s využitím subs:

eqn = subs(eqn, [h_0, v_0, g], [H_0, V_0, G])

%
% Nájdenie času, kedy sa lopta dotkne zeme vyriešením rovnice rovnej nule:

assume(t>0)
tHit = solve(eqn == 0)

% Naformátovanie presného výsledku s využitím vpa:

disp(['Lopta s počiatočnou výškou ' num2str(H_0) 'm a rýchlosťou ' num2str(V_0) ...
    'm/s sa dotkne zeme v čase ' char(vpa(tHit, 4)) 'sekúnd.' ])