function [acc_gravity,acc_motor,acc_brake,acc_road_resistance,acc_drag_response]=calculate_accelerations(val_tilt,max_ang,g,val_accel,val_brake,brake_max,curr_speed,clutch_pos,car_mass,tire_pressure,Cd,A,rho,rpm_vector,torque_vector,curr_rpm,curr_gear_ratio,differential_ratio,transmission_efficiency,wheel_radius,curr_gear)
%CALCULATE_ACCELERATIONS A função calcula os valores das três acelerações
%                        que actuam sobre o carro.
%##########################################################################
% Esta função calcula todas as acelerações que actuam sobre o carro, e
% publica-as já devidamente convertidas para [hm/h²].
%
% INPUTS:
% val_tilt -> Valor actual da barra do tilt (normalizado);
% max_ang -> Valor máximo do angulo da estrada, em [deg];
% g -> Valor da aceleração da gravidade, em [m/s²];
% val_accel -> Valor actual da barra do acelerador (normalizado);
% accel_max -> Valor máximo da aceleração do carro, em [m/s²];
% val_brake -> Valor actual da barra do travão (normalizado);
% brake_max -> Valor (em módulo) máximo da aceleração do travão, em [m/s²];
% curr_speed -> Valor da velocidade actual, em [m/s].
%
% OUTPUTS:
% acc_gravity -> Parcela da aceleração provocada pela gravidade, em [Km/h²];
% acc_motor -> Parcela da aceleração provocada pelo motor, em [Km/h²];
% acc_brake -> Parcela da aceleração provocada pelo travão, em [Km/h²];
% acc_road_resistance -> Parcela da aceleração provocada pelo atrito da estrada, em [Km/h²];
%##########################################################################
% Calculo da parcela de aceleração provocada pela gravidade:
acc_gravity=acceleration_slope_response(val_tilt,max_ang,g);
%##########################################################################
% Calculo da parcela de aceleração provocada pelo atrito da estrada, que só
% actua quando o carro está em movimento:
if curr_speed>0
    acc_road_resistance=-acceleration_road_resistance_response(curr_speed,tire_pressure,max_ang,val_tilt,g);
elseif curr_speed<0
    acc_road_resistance=acceleration_road_resistance_response(curr_speed,tire_pressure,max_ang,val_tilt,g);
elseif curr_speed==0
    acc_road_resistance=0;
end
%##########################################################################
% Calculo da parcela de aceleração provocada pelo motor (inversamente proporcional á embraiagem):
acc_motor=(1.00001-clutch_pos)*acceleration_motor_response(val_accel,rpm_vector,torque_vector,curr_rpm,curr_gear_ratio,differential_ratio,transmission_efficiency,wheel_radius,car_mass,curr_gear);
%##########################################################################
% Calculo da parcela de aceleração provocada pela Drag Force:
acc_drag_response=acceleration_drag_response(Cd,A,rho,curr_speed,car_mass);
%##########################################################################
% Calculo da parcela de aceleração provocada pelos travões:
% O travão só tem efeito se curr_speed>0:
if(curr_speed>0)
    % Calculo da parcela de aceleração (negativa) provocada pelo travão:
    acc_brake=acceleration_brake_response(val_brake,brake_max,car_mass);
% Se a velocidade for inferior a 0:
elseif(curr_speed<0)
    % Calculo da parcela de aceleração (positiva) provocada pelo travão:
    acc_brake=-acceleration_brake_response(val_brake,brake_max,car_mass);
elseif(curr_speed==0)
    % Travão não trava;
    acc_brake=0;
end

% Conversão de [m/s²] para [km/h²]:
acc_road_resistance=convert_ms2_to_kmhr2(acc_road_resistance);
% Conversão de [m/s²] para [km/h²]:
acc_gravity=convert_ms2_to_kmhr2(acc_gravity);
% Conversão de [m/s²] para [km/h²]:
acc_motor=convert_ms2_to_kmhr2(acc_motor);
% Conversão de [m/s²] para [km/h²]:
acc_brake=convert_ms2_to_kmhr2(acc_brake);
% Conversão de [m/s²] para [km/h²]:
acc_drag_response=convert_ms2_to_kmhr2(acc_drag_response);
end