Forum Liberty Basic France
• Index
Suite à un problème technique sur une discussion datant de quelques années, et sur proposition de Roland, je remet ici les éléments rescapés. Ce n'est donc plus la discussion originale, mais le programme dont on parle est bien là, et on peut à nouveau, au besoin, s'exprimer à son sujet :
Voici un petit programme qui affiche sur un graphe l'énergie cinétique emmagasinée par un véhicule, en fonction de sa vitesse et de sa masse.
J'ai récemment vu un spot TV s'adressant aux conducteurs qui vont "un peu plus vite". Que dis-je ! le même spot catastrophiste sur 3 chaines différentes en quelques minutes de zapping, quel matraquage...
Du coup, j'ai coupé la télé, et j'ai voulu en avoir le cœur net : pourquoi sommes-nous chauffards à 150 km/h et honnêtes pères ou mères de famille à 130 km/h ?
La formule donnant l'énergie d'un objet en mouvement est e=mc2 et s'exprime en Joules. m est la masse du véhicule, en kilogrammes, et v sa vitesse en mètres par seconde :
Si la voiture avance à 130 km/h, elle fait environ 36 mètres par seconde, et à 150 km/h, elle fait du 42 m/s. La masse restant constante, l'augmentation d’énergie tient dans le seul rapport du carré des vitesses, et si on pose 42*42/36*36, on obtient 1764/1296=1.36 fois plus d'énergie à 150 km/h qu'à 130
Donc, à 150 km/h, on est 1.36 fois plus chauffard qu'à 130 km/h
Je pensais pouvoir fournir un petit prog illustrant ce fait, mais il est trop bancal et pas assez opérationnel pour être publié ce soir (je n'ai pas la dextérité de Roland et il y a souvent pas mal de recherche pour obtenir quelque chose qui fonctionne, bien que je sois bien plus à l'aise aujourd'hui qu'à l'époque où je découvrais mes combobox)
J'avais envie d'y ajouter aussi un graphique de décélération, avec le temps de réaction et le temps de freinage, mais là on s'engage dans un sacré sacerdoce : l'énergie cinétique est facile à calculer et ne dépend pas du matériel, alors qu'on peut difficilement calculer le freinage d'un véhicule sans connaître les caractéristiques de ses constituants et leurs degré d'usure, ni les température, humidité et état de surface du milieu environnant... Petite réflexion mathématique...
Bon, cette fois-ci, il fonctionne. Cependant c'est codé "à la va-vite", il faudrait que je clarifie et commente, à l'occasion.
Il y a deux courbes : véhicule à vide et véhicule chargé.
Le graphe est redessiné à chaque fois qu'on change une valeur numérique, une couleur de courbe, ou qu'on clique sur "calculer"
Les limites du graphe sont fixes en horizontal (0 à 200 km/h), et variable en vertical (joules) en fonction du maxi rencontré, ce qui explique que les deux courbes peuvent changer même si une seule est modifiée : c'est juste l'affichage, les calculs sont justes. Enfin j'espère...
This is the code :
Code VB :
Edité par Christophe Le 18/10/2020 à 22h55
Voici un petit programme qui affiche sur un graphe l'énergie cinétique emmagasinée par un véhicule, en fonction de sa vitesse et de sa masse.
J'ai récemment vu un spot TV s'adressant aux conducteurs qui vont "un peu plus vite". Que dis-je ! le même spot catastrophiste sur 3 chaines différentes en quelques minutes de zapping, quel matraquage...
Du coup, j'ai coupé la télé, et j'ai voulu en avoir le cœur net : pourquoi sommes-nous chauffards à 150 km/h et honnêtes pères ou mères de famille à 130 km/h ?
La formule donnant l'énergie d'un objet en mouvement est e=mc2 et s'exprime en Joules. m est la masse du véhicule, en kilogrammes, et v sa vitesse en mètres par seconde :
- Première mauvaise nouvelle, plus le véhicule est lourd, plus il y aura d'énergie à dissiper.
- Seconde mauvaise nouvelle, la vitesse est au carré, donc un petit écart de vitesse amènera un grand écart d'énergie.
Si la voiture avance à 130 km/h, elle fait environ 36 mètres par seconde, et à 150 km/h, elle fait du 42 m/s. La masse restant constante, l'augmentation d’énergie tient dans le seul rapport du carré des vitesses, et si on pose 42*42/36*36, on obtient 1764/1296=1.36 fois plus d'énergie à 150 km/h qu'à 130
Donc, à 150 km/h, on est 1.36 fois plus chauffard qu'à 130 km/h
Je pensais pouvoir fournir un petit prog illustrant ce fait, mais il est trop bancal et pas assez opérationnel pour être publié ce soir (je n'ai pas la dextérité de Roland et il y a souvent pas mal de recherche pour obtenir quelque chose qui fonctionne, bien que je sois bien plus à l'aise aujourd'hui qu'à l'époque où je découvrais mes combobox)
J'avais envie d'y ajouter aussi un graphique de décélération, avec le temps de réaction et le temps de freinage, mais là on s'engage dans un sacré sacerdoce : l'énergie cinétique est facile à calculer et ne dépend pas du matériel, alors qu'on peut difficilement calculer le freinage d'un véhicule sans connaître les caractéristiques de ses constituants et leurs degré d'usure, ni les température, humidité et état de surface du milieu environnant... Petite réflexion mathématique...
Bon, cette fois-ci, il fonctionne. Cependant c'est codé "à la va-vite", il faudrait que je clarifie et commente, à l'occasion.
Il y a deux courbes : véhicule à vide et véhicule chargé.
Le graphe est redessiné à chaque fois qu'on change une valeur numérique, une couleur de courbe, ou qu'on clique sur "calculer"
Les limites du graphe sont fixes en horizontal (0 à 200 km/h), et variable en vertical (joules) en fonction du maxi rencontré, ce qui explique que les deux courbes peuvent changer même si une seule est modifiée : c'est juste l'affichage, les calculs sont justes. Enfin j'espère...
This is the code :
Code VB :
'vitesse et énergie 'ec=0.5mv2 [couleursdispo] data "jaune","brun","rouge","rouge foncé","rose","rose foncé","bleu","bleu foncé" data "vert","vert foncé","cyan clair","cyan foncé","blanc","noir","gris clair","gris foncé" dim couleur$(16) restore [couleursdispo] for a=0 to 15:read a$:couleur$(a)=a$:next [couleursJB] data "yellow","brown","red","darkred","pink","darkpink","blue","darkblue","green" data "darkgreen","cyan","darkcyan","white","black","lightgray","darkgray" dim couleurJB$(16) restore [couleursJB] for a=0 to 15:read a$:couleurJB$(a)=a$:next 'choix initial des couleurs de courbe index1=1 index2=3 'données prépositionnées : masseVide1=800 masseCond1=80 masseCharg1=350 masse1=masseVide1+masseCond1+masseCharg1 masseVide2=800 masseCond2=80 masseCharg2=0 masse2=masseVide2+masseCond2+masseCharg2 nomainwin '*** ouverture fenetre principale 'dimensions et position à l'écran WindowWidth = 800 WindowHeight = 600 'contenu statictext #1.cas1, "Situation 1 :", 15, 30, 60, 20 statictext #1.mav1, "Masse à vide :", 85, 30, 70, 20 TEXTBOX #1.mvide1, 160, 27, 40, 20 statictext #1.kgs11, "kg", 205, 30, 30, 20 statictext #1.cond1, "conducteur :", 235, 30, 60, 20 TEXTBOX #1.mcond1, 300, 27, 40, 20 statictext #1.kgs12, "kg", 345, 30, 30, 20 statictext #1.passbag1, "passagers et bagages :", 385, 30, 110, 20 TEXTBOX #1.mpassbag1, 500, 27, 40, 20 statictext #1.kgs13, "kg", 545, 30, 30, 20 COMBOBOX #1.courbe1, couleur$(), [couleurtrace1], 650, 27, 100, 20 statictext #1.cas2, "Situation 2 :", 15, 55, 60, 20 statictext #1.mav2, "Masse à vide :", 85, 55, 70, 20 TEXTBOX #1.mvide2, 160, 52, 40, 20 statictext #1.kgs21, "kg", 205, 55, 30, 20 statictext #1.cond2, "conducteur :", 235, 55, 60, 20 TEXTBOX #1.mcond2, 300, 52, 40, 20 statictext #1.kgs22, "kg", 345, 55, 30, 20 statictext #1.passbag2, "passagers et bagages :", 385, 55, 110, 20 TEXTBOX #1.mpassbag2, 500, 52, 40, 20 statictext #1.kgs23, "kg", 545, 55, 30, 20 COMBOBOX #1.courbe2, couleur$(), [couleurtrace2], 650, 52, 100, 20 button #1.calc, "Calculer", [calcul], UL, 540, 90, 100, 20 button #1.quit, "Quitter", [quitter], UL, 680, 90, 100, 20 largeurbox=WindowWidth-30 hauteurbox=WindowHeight-160 graphicbox #1.graph, 10, 120, largeurbox, hauteurbox xOrigine=60 yOrigine=hauteurbox-40 xFinAxeX=largeurbox-xOrigine-10 yFinAxeY=40 longueurAxeX=xFinAxeX-xOrigine longueurAxeY=yOrigine-yFinAxeY vmaxkmh=200 ' axe X, vitesse max, km/h vmaxms=vmaxkmh*10/36 ' vitesse max, m/s 'fenêtre principale open "Energie cinétique" for window as #1 print #1.mvide1,str$(masseVide1) print #1.mcond1,str$(masseCond1) print #1.mpassbag1, str$(masseCharg1) print #1.mvide2,str$(masseVide2) print #1.mcond2,str$(masseCond2) print #1.mpassbag2, str$(masseCharg2) print #1.courbe1, "selectindex ";index1 print #1.courbe2, "selectindex ";index2 gosub [calcul] print #1, "trapclose [quitter]" wait end '***************sous-programmes******************** [quitter] 'quitte le programme print "[quitter]" close #1 print end [calcul] print "[calculer]" pasHpix=vmaxms/longueurAxeX print #1.mvide1, "!contents? mv$"; print #1.mcond1,"!contents? co$" print #1.mpassbag1, "!contents? pb$" masse1=val(mv$)+val(co$)+val(pb$) print "masse1=";masse1 print #1.mvide2, "!contents? mv$"; print #1.mcond2,"!contents? co$" print #1.mpassbag2, "!contents? pb$" masse2=val(mv$)+val(co$)+val(pb$) print "masse2=";masse2 gosub [dessin_graduations] print #1.graph, "down" for a=0 to longueurAxeX xpoint=xOrigine+a ec1=Ecinetic(masse1,a*pasHpix) ec2=Ecinetic(masse2,a*pasHpix) ec1aff=yOrigine-longueurAxeY*ec1/energiemax ec2aff=yOrigine-longueurAxeY*ec2/energiemax print #1.graph, "color ";couleurJB$(index1-1) print #1.graph, "set ";xpoint;" ";ec1aff print #1.graph, "color ";couleurJB$(index2-1) print #1.graph, "set ";xpoint;" ";ec2aff next a print #1.graph, "up" wait [couleurtrace1] print "[couleurtrace1]" print #1.courbe1, "selectionindex? index1" gosub [calcul] wait [couleurtrace2] print "[couleurtrace2]" print #1.courbe2, "selectionindex? index2" gosub [calcul] wait [dessin_graduations] print "[dessin_graduations]" print #1.graph, "down" print #1.graph, "fill black" print #1.graph, "color darkgreen" print #1.graph, "line ";xOrigine;" ";yOrigine;" ";xOrigine;" ";yFinAxeY print #1.graph, "line ";xOrigine;" ";yOrigine;" ";xFinAxeX;" ";yOrigine 'graduations axe x pasHaff=int(vmaxkmh/4) longueurAxeX=xFinAxeX-xOrigine gradua=0 for a=0 to 20 gradx=xOrigine+longueurAxeX*a/20 if a mod 5 = 0 then demigrad=8 print #1.graph, "backcolor black" print #1.graph, "color white" print #1.graph, "place ";gradx-3;" ";yOrigine+23 print #1.graph, "\";str$(gradua);" " gradua=gradua+pasHaff print #1.graph, "color darkgreen" else demigrad=5 end if print #1.graph, "line ";gradx;" ";yOrigine-demigrad;" ";gradx;" ";yOrigine+demigrad next 'dessin des limitations de vitesse kmhParPix=longueurAxeX/vmaxkmh vitesselimite=50:gosub [dessineVLimite] vitesselimite=90:gosub [dessineVLimite] vitesselimite=130:gosub [dessineVLimite] 'dessin des graduations print #1.graph, "backcolor black" print #1.graph, "color white" print #1.graph, "place ";gradx+30;" ";yOrigine+23 print #1.graph, "\km/h " 'graduations axe y 'énergie maximale ec1=Ecinetic(masse1,vmaxms) ec2=Ecinetic(masse2,vmaxms) if ec1>ec2 then energiemax=ec1 else energiemax=ec2 print "ec1=";ec1;" ec2=";ec2;" energiemax=";energiemax pasVaff=int(energiemax/4) longueurAxeY=yOrigine-yFinAxeY gradua=0 for a=0 to 20 'grady = yOrigine-pasVpix*a/21 grady=yOrigine-longueurAxeY*a/20 if a mod 5 = 0 then demigrad=8 print #1.graph, "backcolor black" print #1.graph, "color white" print #1.graph, "place ";xOrigine-55;" ";grady+5 print #1.graph, "\";str$(gradua);" " gradua=gradua+pasVaff print #1.graph, "color darkgreen" else demigrad=5 end if print #1.graph, "line ";xOrigine-demigrad;" ";grady;" ";xOrigine+demigrad;" ";grady next print #1.graph, "backcolor black" print #1.graph, "color white" print #1.graph, "place ";xOrigine-35;" ";grady-20 print #1.graph, "\J " print #1.graph, "up" return [dessineVLimite] repere=xOrigine+vitesselimite*kmhParPix print #1.graph, "line ";repere;" ";yOrigine;" ";repere;" ";yFinAxeY print #1.graph, "place ";repere;" ";yFinAxeY-5 print #1.graph, "\";vitesselimite;" km/h" return function Ecinetic(m,v) Ecinetic=0.5*m*v^2 end function
Edité par Christophe Le 18/10/2020 à 22h55
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
• Index
1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie