2 pièce(s) jointe(s)
Problèmes de discrétisation.
Bonjour.
Suite à ce post j'ai effectué une implémentation du problème. (je remet la figure) :
http://www.developpez.net/forums/att...donnee/fig.png
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| if(t>=p)
{
if(t+1>=t2)
{
speed=C-sum;
return 1;
}
speed-=decc_pos;
}
else
{
speed+=acc_pos;
if(speed>h)
speed=h;
}
sum+=speed; |
avec acc_pos(a0), la première pente et decc_pos(a2) la seconde; h est la hauteur du point en p; C est la consigne. ce code étant exécuté a chaque fois avec un t incrémenté de 1.
Les temps sont calculés de la façon suivante (en double) :
Code:
1 2 3
| t2=sqrt(2C*(acc_pos+decc_pos))/(acc_pos*decc_pos));
h=2C/sf->t2;
t0=h/acc_pos; |
par la suite, on convertit t1 et t2 en int.
Le problème est que quand je teste avec la discrétisation de t2 et t0 (car t discret), j'obtiens, pour acc_pos_==decc_pos=5 C=5820 le résultat suivant:
http://www.developpez.net/forums/att...1&d=1268151699
de même, avec C=582:
http://www.developpez.net/forums/att...1&d=1268152151
Les pics correspondant à l'ajustement de l'intégrale.
c'est clairement un problème de discrétisation... plus précisément, cela se produit car la diminution (t0) commence trop tôt ou trop tard.
Si vous avez une idée...
merci :D