vincentstryckmans
Messages postés228Date d'inscriptionlundi 5 avril 2004StatutMembreDernière intervention25 octobre 2006 7 oct. 2004 à 10:28
Salut bLiNKSeB,
Je n'ai pas chercher l'erreur dans ton code, mais je te propose ma vision de ton problème.
Pour moi, il est important de déterminer correctement, dès le début, le nombre d'itération qu'il faudra utiliser pour dessiner toute l'ellipse.
Ce nombre d'itération peut se calculer sur base d'un delta temps que tu souhaites avoir entre chaque tracé et pour un temps total pour le tracé global ou alors donner un delta angulaire de segment à tracer à chaque itération et ce pour un temps total donné.
// angle_deb, angle_fin sont les angles, en radian, de début et de fin de tracé de l'ellipse
// delta_angle_affiche est le delta d'angle, en radian, qui détermine la taille du segment d'ellipse à dessiner à chaque itération
// delai_affiche est le temps que tu alloues pour dessiner ton ellipse, en millisecondes
// delta_delai_affiche : le nombre de millisecondes entre chaque tracè de segment d'ellipse
// flag_affiche est à true si c'est delta_delai_affiche qui détermine le nombre d'itération et est à flase si c'est delta-angle-affiche qui détermine le nombre d'itérations
var delta_angle : real;
nbre_iteration : integer;
begin
delta_angle := angle-fin - angle_deb;
// delta_angle est donc la taille du segment complet d'ellipse à dessiner
// Il faut maintenant déterminer le nombre d'itération
if flag_affiche then
begin
if delta_delai_affiche > 0 then
begin
// on calcule le nombre d'itérations et la taille angulaire du segment d'ellipse à dessiner à chaque itération
nbre_iteration := round(tps_affiche / delta_delai_affiche);
delta_angle_affiche := delta_angle / nbre_iteration;
end
else
// Par défaut si delta_delai_affiche <= 0, on, prend 1000 iteration et on calcule alors les deux delta
begin
nbre_iteration := 1000;
delta_delai_affiche := round(tps_affiche/nbre_iteration);
delta_angle_affiche := delta_angle / nbre_iteration;
end;
// si on itère en fonction du delta_angle (flag à false) on effctue les mêmes calculs mais sur le delta_delai_affiche alors
if delta_angle_affiche > 0 then
begin
nbre_iteration := round(delta_angle/delta_angle_affiche);
delta_delai_affiche := delai_affiche / nbre_iteration;
end
else
begin
nbre_iteration := 1000;
delta_delai_affiche := round(tps_affiche/nbre_iteration);
delta_angle_affiche := delta_angle / nbre_iteration;
end;
end;
// Tu disposes maintenant du nombre d'itérations que tu devras employer pour tracer ton ellipse, de la valeur de l'angle du segment d'ellipse à dessiner à chaque itération et enfin le nombre de milliseconde qu'il te faudra attendre afin de dessiner le segment suivant
// Je te laisse le soin d'écrire la boucle et le code graphique
blinkseb
Messages postés57Date d'inscriptionmercredi 25 août 2004StatutMembreDernière intervention18 avril 2005 7 oct. 2004 à 17:47
Merci beaucoup, je vais m'empresser de tester ce code ! Une chose, c'est que l'angle entre chaque itération reste le même. En effet, pour qu'on ai l'impression que l'ellipse est tracée en temps réel, j'augmente l'angle de départ de 0.01 Radian à chaque tour.
Ce qu'il faut donc, c'est le temps à attendre entre deux tracer de point, distant l'un de l'autre de 0.01 radian à chaque fois.
vincentstryckmans
Messages postés228Date d'inscriptionlundi 5 avril 2004StatutMembreDernière intervention25 octobre 2006 8 oct. 2004 à 14:19
J'ai rajouter du vide.
Voilà ce qui arrive lorsque l'on répond dans un forum après un drink au boulot.
Si tu veux un affichage en temps réel, pas de problème.
Oblige alors à dessiner un segment d'ellipse toute les x millisecondes avec une ouverture d'angle figé.
Donc tu peux adapter le code en précisant un delta temps avec un minimum de deltra angulaire ou vice-versa; à toi d'écrire les règfes qui te conviennent.
Je vais écrire une lapalissade :
D'abord écrire et décrire ce que je veux faire, en français, et puis je le traduis en pascal, c++, visualbasic (beurkkkkk...)
Bon WE
Et comme disait ma grand-mère : il y a toujours du soleil derrière les nuages.