%idea: dato un rettangolo di lati L1 ed L2 
%partire da un punto noto, es (0,0),
%generare un punto casuale (x1,y1) nel rettangolo,
%prendere punti (a1,b1) sul segmento che congiunge i due punti ad una distanza fissa d.
%se il punto (a_i,b_i) che tocherebbe essere preso esce dal segmento, 
%generare un nuovo punto (x2,y2)e considerare il segmento da (a_i-1,b_i-1)
%a (x2,y2).
%iterare

%passo uomo 4km/h, telecamere 25frame/s
d_uomo = 4 / 3.6 / 25;  %=0.0444m/frame

%clc
%clear

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%    PARAMETRI    %%%%%     %(lunghezze in metri)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%nota: modificare solo quelli con il segno di = tra spaziature
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
L1 = 50;                   %asse x, misura a
L2 = 25;                   %asse y, misura b
campioni = 50000;           %numero di campioni di traiettoria

proporzione = 0.4;          %non mettere 0 !!
maxlengthspezzate=min(L1,L2)*proporzione; %lunghezza massima dei segmenti di cammino
%maxlengthspezzate = 10;     %manuale
d = 0.05;                   %lunghezza dei passi tra ogni frame
d = d_uomo;
prossimita=d+0.01;          %inseguo il punto random fino a tale distanza
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

a0 = 0;
b0 = 0;
%genero il primo punto
randx  = L1 * rand;
randy  = L2 * rand;
%calcolo il coefficiente angolare della retta passante per i due punti
m = (randy-b0)/(randx-a0);
%trovo la coordinata x corrispondente a uno spostamento di d lungo tale retta 
a1 = a0 + d*cos(atan(m));
%trovo la corrispondente coordinata y
b1 = m * a1 + b0;
%controllo la lunghezza dello spostamento
s = sqrt(a1^2+b1^2);
%memorizzo i punti proposti
%per migliorare le prestazioni si puo' fare una preallocazione (approssimativa) 
%anche per i vettori dei punti random, pero' dipende dagli altri parametri
%cioe' il cambia il rapporto length(A)/length(Randx)
Randx = [randx];
Randy = [randy];
%memorizzo i punti scelti
A = zeros(1,campioni);
B = zeros(1,campioni);
A(1) = 0;
A(2) = a1;
B(1) = 0;
B(2) = b1;

%ciclo

a=a1;
b=b1;
segnox=1;
segnoy=1;
entra=1;
iter1=2;

while A(length(A))==0
%for i=1:campioni
    anew = a + segnox*d*abs(cos(atan(m)));
    bnew = b + segnoy*d*abs(sin(atan(m)));
    %s = sqrt((anew-a)^2+(bnew-b)^2);
    dist = sqrt((anew-randx)^2+(bnew-randy)^2);
    if dist>prossimita && anew<L1 && bnew<L2 && anew>0 && bnew>0     %rimango nel rettangolo e lontano al punto random
        A(iter1) = anew;
        B(iter1) = bnew;
        a = anew;
        b = bnew;
        iter1 = iter1+1;
    else
        entra = 1;
        while entra
        randx  = L1 * rand;
        randy  = L2 * rand;
        distfrarandom = sqrt((Randx(length(Randx))-randx)^2+(Randy(length(Randy))-randy)^2);
        if distfrarandom < maxlengthspezzate
            Randx = [Randx randx];
            Randy = [Randy randy];
            m = (randy-b)/(randx-a);
            if randy<b && randx<a 
               segnox=-1;
               segnoy=-1;
            elseif randy>b && randx<a
               segnox=-1;
               segnoy=1;
            elseif randy<b && randx>a
               segnox=1;
               segnoy=-1;
            else
               segnox=1;
               segnoy=1;
            end
            entra=0;
        end
        end
    end
end

%plot

%la curva blu sono i punti random proposti.
%la curva rossa i punti della traierttoria equispaziati di d che tentano di
%inseguire i punti blu.

plot(A,B,'-r.', Randx, Randy,'-b.')
axis equal
axis([0 L1 0 L2])














