clear;
[track_baly, track_balx] =
loadkinoveadata('Track_bal_goede_horizontaal.txt');
[track_bordx, track_bordy] =
loadkinoveadata('Trackpad_bord_goede_horizontaal.txt');
% Wij hebben deze data vervolgens opgeslagen vanuit de workspace en
gebruikt in onze opdracht en berekeningen. Dit stond in een apart bestand.
clear;
load("track_balx.mat");
load("track_baly.mat");
load("track_bordx.mat");
load("track_bordy.mat");
% Videos zijn horizontaal gefilmd en niet gedraaid. Hierdoor zijn de
% x-coordinaten op camera de y-coordinaten in het echt en andersom.
r_o = [track_bordy(1,1), track_bordx(1,1)];
r_y1 = [track_bordy(1,2), track_bordx(1,2)];
r_y2 = [track_bordy(1,3), track_bordx(1,3)];
r_minx1 = [track_bordy(1,4), track_bordx(1,4)];
r_minx2 = [track_bordy(1,5), track_bordx(1,5)];
r_miny1 = [track_bordy(1,6), track_bordx(1,6)];
r_miny2 = [track_bordy(1,7), track_bordx(1,7)];
r_x1 = [track_bordy(1,8), track_bordx(1,8)];
r_x2 = [track_bordy(1,9), track_bordx(1,9)];
% de afstanden van de kinovea data van r_minx2 tot elk van de andere punten
% op de x-as in hoeveelheid pixels
r_minx2_minx2_pix = abs(r_minx2(1)-r_minx2(1));
r_minx2_minx1_pix = abs(r_minx2(1)-r_minx1(1));
r_minx2_o_pix = abs(r_minx2(1)-r_o(1));
r_minx2_x1_pix = abs(r_minx2(1)-r_x1(1));
r_minx2_x2_pix = abs(r_minx2(1)-r_x2(1));
% afstanden zoals hierboven berekend in een matrix
afstand_pixx = [r_minx2_minx2_pix, r_minx2_minx1_pix, r_minx2_o_pix,
r_minx2_x1_pix, r_minx2_x2_pix];
% de gemeten afstanden van de van r_minx2 tot elk van de andere punten
% op de x-as in meters (rl voor real life)
r_minx2_minx2_rl = 0;
r_minx2_minx1_rl = 0.3;
r_minx2_o_rl = 0.5;
r_minx2_x1_rl = 0.792;
r_minx2_x2_rl = 1.00;
% afstanden zoals hierboven berekend in een matrix
afstand_rlx = [r_minx2_minx2_rl, r_minx2_minx1_rl, r_minx2_o_rl,
r_minx2_x1_rl, r_minx2_x2_rl];
% Plot punten voor kalibratielijn x-as
figure(1)
plot(afstand_rlx,afstand_pixx, 'o')
title('punten voor kalibratielijn x-as')
,xlabel('afstanden markercoördinaten in real life')
ylabel('afstanden markercoördinaten in pixels')
% berekening gevoeligheid: coef(1) en offset: coef(2).
coefx = polyfit(afstand_rlx,afstand_pixx,1);
% kalibratielijn x-as afstand_rlx = (afstandpixx - coefx(2))/coefx(1)
% ditzelfde doen wij voor de kalibratielijn van de y-as
% de afstanden van de kinovea data van r_miny2 tot elk van de andere punten
% op de y-as in hoeveelheid pixels
r_miny2_miny2_pix = abs(r_miny2(2)-r_miny2(2));
r_miny2_miny1_pix = abs(r_miny2(2)-r_miny1(2));
r_miny2_o_pix = abs(r_miny2(2)-r_o(2));
r_miny2_y1_pix = abs(r_miny2(2)-r_y1(2));
r_miny2_y2_pix = abs(r_miny2(2)-r_y2(2));
% afstanden zoals hierboven berekend in een matrix
afstand_pixy = [r_miny2_miny2_pix, r_miny2_miny1_pix, r_miny2_o_pix,
r_miny2_y1_pix, r_miny2_y2_pix];
% de gemeten afstanden van de van r_miny2 tot elk van de andere punten
% op de y-as in meters (rl voor real life)
r_miny2_miny2_rl = 0;
r_miny2_miny1_rl = 0.198;
r_miny2_o_rl = 0.443;
r_miny2_y1_rl = 0.701;
r_miny2_y2_rl = 0.899;
% afstanden zoals hierboven berekend in een matrix
afstand_rly = [r_miny2_miny2_rl, r_miny2_miny1_rl, r_miny2_o_rl,
r_miny2_y1_rl, r_miny2_y2_rl];
% Plot punten voor kalibratielijn y-as
figure(2)
plot(afstand_rly,afstand_pixy, 'o')
title('punten voor kalibratielijn y-as')
xlabel('afstanden markercoördinaten in real life (m)')
ylabel('afstanden markercoördinaten in pixels')
% berekening gevoeligheid: coef(1) en offset: coef(2).
coefy = polyfit(afstand_rly,afstand_pixy,1);
% kalibratielijn_afstand_rly = (afstandpixy - coefy(2))/coefy(1);
% berekening real world coördinaten tennisbal, met behulp van kalibratie
r_balx = (track_balx - coefx(2))/coefx(1);
r_baly = (track_baly - coefy(2))/coefy(1);
% Framerate was 50 fps -> 50 frames per seconde, dus delen door 50
t = [1:length(r_balx)]./50;
% Plot verticale positie bal tegen de horizontale positie bal
figure(3)
plot(r_balx,r_baly)
title('Vooraanzicht val van de bal')
xlabel('horizontale positie bal (m)')
ylabel('verticale positie bal (m)')
axis equal
figure(4)
subplot(2,1,1)
plot(t,r_balx)
title('Horizontale positie bal tegen de tijd')
xlabel('tijd (s)')
, ylabel('horizontale positie (m)')
subplot(2,1,2)
plot(t,r_baly)
title('Verticale positie bal tegen de tijd')
xlabel('tijd(s)')
ylabel('verticale positie bal (m)')
v_baly = gradient(r_baly, t);
a_baly = gradient(v_baly, t);
% Plot van de verticale versnelling van de bal als functie van de tijd
figure(5)
plot(t,a_baly)
title('Valversnelling bal tegen de tijd')
xlabel('tijd(s)')
ylabel('valversnelling (m/s^2)')
% We zien in de grafiek dat de bal meestal een valversnelling van ongeveer
% -9.81 m/s^2 heeft. De pieken die in de grafiek zijn te zien, zijn de
% momenten dat de bal op de grond komt en stuitert. Deze pieken zijn enorm
% hoog qua valversnelling, dit klopt, want er moet wel een grote kracht
% zijn om de bal omhoog te laten komen. Terwijl de bal omhoog stuitert
% is er namelijk geen kracht die hier voor kan zorgen, toch stuitert de bal
% best hoog, de valversnelling moet daar dus een flinke positieve piek
% krijgen. De gemeten valversnelling is 9.55 m/s^2. Dit is een gemiddelde
% van de valversnellingen in de grafiek op de momenten dat de bal naar
% beneden valt. De echte waarde van de valversnelling is 9.81 m/s^2. Onze
% waarde wijkt hier een beetje vanaf, dit kan komen doordat de video
% wellicht wat scheef is genomen, de kalibratielijn niet precies klopt,
% verkeerde plaatsing van de marker tennisbal in kinovea (niet precies in
% het midden) en andere kleine meetfoutjes.