%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                            Michael Pokojovy                             % 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function splines;
    figure(1);

    set(gcf, 'PaperUnits', 'centimeters');
    xSize = 16; ySize = 15;
    xLeft = (21 - xSize)/2; yTop = (30 - ySize)/2;
    set(gcf,'PaperPosition', [xLeft yTop xSize ySize]);
    set(gcf,'Position',[0 0 xSize*50 ySize*50]);

    hold on;

    a = [-1, 1]; b = [-10, 12];
    p = [-6, 4]; q = [-3, -4];
    
    draw_spline(a, b, p, q, 'blue');

    xlabel('x_{1}');
    ylabel('x_{2}');

    t = title(['Beispiel eines kubischen Splines'], 'interpreter', 'latex');
    set(t, 'FontSize', 16);
    
    function draw_spline(a, b, p, q, color)
        s = @(t) a + p*t + (3*(b - a) - 2*p - q)*t^2 + (p + q - 2*(b - a))*t^3;
        
        N = 100;
        t = linspace(0, 1, N);
        
        x = zeros(2, N);
        
        for i = 1:100
            x(:, i) = s(t(i));
        end
        
        plot(x(1, :), x(2, :), 'Color', color);
        plot([a(1) a(1) + p(1)], [a(2) a(2) + p(2)], 'LineWidth', 3, 'Color', 'black');
        plot(a(1) + p(1), a(2) + p(2), 'r.', 'MarkerSize', 15);
        plot([b(1) b(1) - q(1)], [b(2) b(2) - q(2)], 'LineWidth', 3, 'Color', 'black');
        plot(b(1) - q(1), b(2) - q(2), 'r.', 'MarkerSize', 15);
    end
end