relation entre kilométrage et vitesse instanée

relation entre kilométrage et vitesse instanée - C - Programmation

Marsh Posté le 05-04-2006 à 16:00:30    

Voila je suis en train de faire mon projet qui consiste à simuler un ordinateur de bord et il faut donc que je calculer le kilométrage parcouru.
J'ai donc la vitesse instanée qui est choisie par l'utilisateur...
il faut que j'affiche donc le kilométrage qui augmente en fonction de la vitesse...
je ne vois pas comment faire du tout :/


Message édité par dRfELL le 05-04-2006 à 16:05:59
Reply

Marsh Posté le 05-04-2006 à 16:00:30   

Reply

Marsh Posté le 05-04-2006 à 16:03:13    

Citation :

je ne vois pas comment faire du bloque


 
avec une usine à blocs !
http://www.lft.mg/matieres/svt/carri%E8re_marbre2.jpg
 
Sinon ton message n'est pas du tout clair. SI t'as la vitesse, tu peux compter le temps qui s'écoule et donc calculer une distance parcourue ?

Reply

Marsh Posté le 05-04-2006 à 16:04:19    

MDR,
je sais pas pourquoi j'ai écris ca ! c'était ce que je pensais...
ca m'arrive des fois, enfin, je corrige :D

Reply

Marsh Posté le 05-04-2006 à 16:04:59    

ben en fait j'ia la vitesse instanée, le temps qui s'écoule je peux le récupérer  avec clock() ... mais je sais pas comment allier tout ca
 
vu que le programme fonctionne en continu, je ne vois pas trop comment gérer ca, ca monte toujours, la vitesse peut toujours varier...
 
je pense que tu as l'idée d'utiliser la vitesse moyenne et le temps total... mais ca ne marche pas ici, ou alors je vois pas comment faire vu que le kilométrage affiché augmenter plus ou moins vite selon la vitesse instanée


Message édité par dRfELL le 05-04-2006 à 16:08:05
Reply

Marsh Posté le 05-04-2006 à 16:07:55    

distance = :int: vitesse dt
 
 
le plus simple est de réveiller ton programme régulièrement (avec une fréquence assez élevée) et de rajouter au kilométrage déjà existant le produit :
[vitesse_instantanée] x [temps_écoulé_depuis_la_dernière_fois]


Message édité par franceso le 05-04-2006 à 16:08:57

---------------
TriScale innov
Reply

Marsh Posté le 05-04-2006 à 16:08:46    

j'y ai pensé ca, mais je ne sais pas comment faire :/

Reply

Marsh Posté le 05-04-2006 à 16:09:48    

tu sais pas comment faire quoi ? c'est le réveil de ton programme à intervalles de temps réguliers qui te pose problème ?


---------------
TriScale innov
Reply

Marsh Posté le 05-04-2006 à 16:11:38    

oui c'est ca. c'est la mise a jour constante du kilométrage

Reply

Marsh Posté le 05-04-2006 à 16:14:16    

comment est structuré ton simulateur ?
sur quel OS tu tournes ?
quel type de fréquence de rafraichissement veux-tu obtenir ? (attention, plus les accélérations sont élevées, plus tu vas être obligé de rafraîchir souvent)


---------------
TriScale innov
Reply

Marsh Posté le 05-04-2006 à 16:18:13    

oui je vais m'expliquer :
 
On fait sous Visual C... et WinXP
j'ai donc pleins de fonctions : vitesse instanée, kilométrage total, etc...
 
La fonction main sera donc une seule boucle qui récupère l'appui d'une touche (tout se controle a l'aide de qq touches du clavier)
 
Donc la fréquence de raffraichissement je ne sais pas trop : on règle la vitesse de 5 en 5 km/h...

Reply

Marsh Posté le 05-04-2006 à 16:18:13   

Reply

Marsh Posté le 05-04-2006 à 16:28:14    

Citation :

on règle la vitesse de 5 en 5 km/h...

et tu considères que dès que l'utilisateur appuie sur la touche en question la vitesse augmente instantanément de 5km/h et reste constante jusqu'à l'action suivante de l'utilisateur ?
 
C'est une mauvaise approximation, mais ça simplifie grandement ton problème : dans ce cas, il suffit que tu incrémentes ton compteur kilométrique sur la base de l'ancienne vitesse juste avant de la modifier suite à une action de l'utilisateur. Tu n'as plus besoin de réveiller ton processus à intervalles réguliers.

Message cité 1 fois
Message édité par franceso le 05-04-2006 à 16:28:27

---------------
TriScale innov
Reply

Marsh Posté le 05-04-2006 à 16:33:09    

franceso a écrit :

Citation :

on règle la vitesse de 5 en 5 km/h...

et tu considères que dès que l'utilisateur appuie sur la touche en question la vitesse augmente instantanément de 5km/h et reste constante jusqu'à l'action suivante de l'utilisateur ?

C'est une mauvaise approximation, mais ça simplifie grandement ton problème : dans ce cas, il suffit que tu incrémentes ton compteur kilométrique sur la base de l'ancienne vitesse juste avant de la modifier suite à une action de l'utilisateur. Tu n'as plus besoin de réveiller ton processus à intervalles réguliers.


 
c'est tout a faire ca :)
 
mais je ne vois toujours pas comment faire, on peut travailler avec la variation ou non de la vitesse peut etre ?
il faut trouver le temps qu'il reste à telle ou telle vitesse


Message édité par dRfELL le 05-04-2006 à 16:34:01
Reply

Marsh Posté le 05-04-2006 à 16:42:52    

je ne vois pas où est le problème : dès que l'utilisateur appuie sur une touche pour effectuer une action (quelle qu'elle soit), on met à jour le kilométrage et on effectue l'action demandée.
 
en pseudocode, ca donne un truc du genre :
 

// initialisation
last_km_update = clock()
 
// boucle principale
while ...
 
  // attente d'une action de l'utilisateur
  command = user_action()
 
  // mis à jour du kilométrage
  now = clock()
  km += vitesse * (now-last_km_update)
  last_km_update = now
 
  // traitement de la commande de l'utilisateur
  switch( command )
    case 'accel' : vitesse++
    case 'brake' : vitesse--
    case ...
  end switch
end while


 
tu saisis le principe ?


---------------
TriScale innov
Reply

Marsh Posté le 05-04-2006 à 16:44:34    

Citation :

il faut trouver le temps qu'il reste à telle ou telle vitesse

vu que la vitesse ne change que quand l'utilisateur appuie sur la touche 'accélérer' ou 'freiner', tu sais bien depuis combien de temps il est à la vitesse actuelle...


---------------
TriScale innov
Reply

Marsh Posté le 05-04-2006 à 16:46:17    

ahhh mais oui, je n'avais pas pensé à faire ca comme ca...
bon je vais essayer de mettre ca en plus,  
je vais bientot en cours, donc je sais pas si je peux le faire de suite, mais je poste ca des que j'ai fini ;-)
 
merci encore

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed