Forum Liberty Basic France

Général » Vitesse et énergie cinétique travaux pratiques du dimanche
Le 07/08/2016 à 20h39

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 516
Hello Boys and Girls !

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 ?

Alors, quand on roule à vitesse constante, on a accumulé, du fait de la vitesse, une énergie cinétique ec=0.5*mv2, qu'on exprime en Joules, et qu'il faudra dissiper si on veut s'arrêter. Dans l'équation de l'énergie cinétique, m est la masse du véhicule en kg, et v sa vitesse en mètres par seconde.

Donc, 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.

Essayons de quantifier la chose :
  • à 130 km/h nous roulons à 36.11 m/s, qu'on arrondit à 36 pour les calculs, et le carré de 36 vaut 1296
  • à 150 km/h nous roulons à 41.66 m/s, qu'on arrondit à 42 pour les calculs, et le carré de 42 vaut 1764


Pour que ce soit plus parlant, on fait le rapport de ces deux carrés : 1764/1296 = 1.36

Donc à masse égale, un véhicule qui roule à 150 km/h a 1.36 fois plus d'énergie cinétique que s'il roulait à 130 km/h. Je ne crois pas qu'on soit chauffard à 150 et vertueux à 130, on est juste 1.36 fois plus chauffard à 150 qu'à 130, la sécurité apportée par le fait d'être "dans les clous" semble être toute relative...

Je pensais pouvoir fournir un petit prog illustrant ce fait l'énergie cinétique en fonction de la masse et de la vitesse par un graphique, 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...

A+



Edité par Christophe Le 08/08/2016 à 12h06
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 08/08/2016 à 11h29

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 516
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

'édition du 11 août : rajout des vitesses limites courantes
'mais toujours pas de simplification/clarification du code. ça viendra

[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 11/08/2016 à 21h55
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 08/08/2016 à 12h28

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Pas mal ton truc, tu es mûr pour nous faire un traceur de courbes pour quelques fonctions, avec choix des paramètres
Puis plus tard y ajouter une analyse littérale de fonction quelconque
Moi, je tenterais bien de la factorisation de formule 4 opérateurs 4 variables pour extraire une variable en fonction des autres

Sur la vitesse, j'ai trouvé ça sur le forum anglophone:

C'est là---->: velocity.zip
____________________
Roro

   
Le 09/08/2016 à 00h25

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 516
Merci, il ne s'est pas laissé faire ;) je vais rajouter les lignes verticales pour 50, 90, 130, ça pourra être parlant.

Pour velocity, Le texte qui défile me stupéfie : on peut faire un sprite de cette dimension ? J'ai pas regardé le code mais il y a bien dans le dossier le texte en bitmap avec la moitié blanche et la moitié noire. Il y a tout un topo aussi qui explique les lois du mouvement. Je regarde demain

a+, je dois dormir^^

(edit du 11/08, pour éviter de faire un nouveau post pour si peu. Le programme a été modifié pour tenir compte des limitations de vitesses courantes. Par contre, plus beaucoup de temps dans les semaines qui viennent, je ne pense pas me reconnecter durant cette période (quoique^^) )



Edité par Christophe Le 11/08/2016 à 21h59
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia6 + Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Général » Vitesse et énergie cinétique travaux pratiques du dimanche  

 |  |

1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie