Course à pied : 18 Km/h

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Course à pied : 18 Km/h

Message par Ollivier »

Salut,

Bon voilà je pense que ça peut porter à inspiration de poster cette petite curiosité. Je me suis amusé il y a un moment à étudier les mouvements de jambes quand ces dernières gambadent à 18 kilomètres par heure. La référence est le bassin, et non le sol.

A titre indicatif, pour une personne mâle de 20 ans, non fumeur, de 1 mètre 80 de haut, à plus ou moins 5 centimètres avec une masse de 70 Kg à plus ou moins 8 Kg, en système aérobie, la dépense d'énergie dans une course à 18 Km/h est inférieure à la dépense d'énergie dans une course à 14 Km/h. La courbe de dépense d'énergie suit un polynôme de degré 3. Ce polynôme évolue selon quinze paramètres si l'on veut pousser l'étude au perfectionnisme.

J'ai depuis trouvé comment modifier les valeurs afin d'effectuer un arbre des mouvements selon le rythme de course, la charge dorsale, etc, et j'en passe. Donc voici le code initial.

>> Touche Echappement pour quitter
>> Molette de la souris pour modifier la vitesse de lecture (et non le rythme de course)

Bonne bourre!

Code : Tout sélectionner

   DisableDebugger

Structure GraphInfo
   ThreadNo.I
   ScreenOpened.I
   ScreenClosed.I
   ScreenActive.I
   Quit.I
   BackFrame.I
   TestFrame.I
EndStructure

Procedure GraphProcess(*Graph.GraphInfo)
   With *Graph
      InitSprite()
      InitKeyboard()
      InitMouse()
      OpenScreen(800, 600, 32, "")
      \BackFrame = CreateSprite(#PB_Any, 800, 600)
      StartDrawing(SpriteOutput(\BackFrame) )
         Box(0, 0, 800, 600, RGB(1, 1, 1) )
      StopDrawing()
      \TestFrame = CreateSprite(#PB_Any, 80, 60)
      StartDrawing(SpriteOutput(\TestFrame) )
         Box(0, 0, 80, 60, #Red)
      StopDrawing()
      \ScreenOpened = 1
      TG0.F = #PI
      T0V.F = 0.1
         Repeat
            Delay(1)
            T0.F + T0V.F
            T1.F = #PI / 2.0 + Sin(T0) * 0.4
            T2.F = 1.0 + Sin(T0 - #PI / 2.0) * 1.0
            T3.F = 0.5 + Sin(T0) * 0.5
            T4.F = #PI / 2.0
            T5.F = 0.0 - #PI / 2.0
            T6.F = Sin(T0 - #PI / 2.0) * 1.0

            TG0.F + T0V.F
            TG1.F = #PI / 2.0 + Sin(TG0) * 0.4
            TG2.F = 1.0 + Sin(TG0 - #PI / 2.0) * 1.0
            TG3.F = 0.5 + Sin(TG0) * 0.5
            TG4.F = #PI / 2.0
            TG5.F = 0.0 - #PI / 2.0
            TG6.F = Sin(TG0 - #PI / 2.0) * 1.0

            DColX.F = 400.0
            DColY.F = 300.0
            DColWidth.F = Cos(T0 + #PI / 4.0) * 10
            DColHeight.F = Sin(T0 + #PI / 4.0) * 10
            DCuisseX.F = DColX + DColWidth
            DCuisseY.F = DColY + DColHeight
            DCuisseWidth.F  = Cos(T1) * 100
            DCuisseHeight.F = Sin(T1) * 100 
            DJambeX.F = DCuisseX + DCuisseWidth
            DJambeY.F = DCuisseY + DCuisseHeight
            DJambeWidth.F = Cos(T1 + T2) * 100  
            DJambeHeight.F = Sin(T1 + T2) * 100  
            DChevilleX.F = DJambeX + DJambeWidth
            DChevilleY.F = DJambeY + DJambeHeight
            DChevilleWidth.F = Cos(T1 + T2 + T3) * 10
            DChevilleHeight.F = Sin(T1 + T2 + T3) * 10
            DTalonX.F = DChevilleX + DChevilleWidth
            DTalonY.F = DChevilleY + DChevilleHeight
            DTalonWidth.F = Cos(T1 + T2 + T3 + T4) * 5
            DTalonHeight.F = Sin(T1 + T2 + T3 + T4) * 5
            DPiedX.F = DChevilleX + DChevilleWidth
            DPiedY.F = DChevilleY + DChevilleHeight
            DPiedWidth.F = Cos(T1 + T2 + T3 + T5) * 20
            DPiedHeight.F = Sin(T1 + T2 + T3 + T5) * 20
            DOrteilX.F = DPiedX + DPiedWidth
            DOrteilY.F = DPiedY + DPiedHeight
            DOrteilWidth.F = Cos(T1 + T2 + T3 + T5 + T6) * 10
            DOrteilHeight.F = Sin(T1 + T2 + T3 + T5 + T6) * 10

            GColX.F = 400.0
            GColY.F = 300.0
            GColWidth.F = Cos(TG0 + #PI / 4.0) * 10
            GColHeight.F = Sin(TG0 + #PI / 4.0) * 10
            GCuisseX.F = GColX + GColWidth
            GCuisseY.F = GColY + GColHeight
            GCuisseWidth.F  = Cos(TG1) * 100
            GCuisseHeight.F = Sin(TG1) * 100 
            GJambeX.F = GCuisseX + GCuisseWidth
            GJambeY.F = GCuisseY + GCuisseHeight
            GJambeWidth.F = Cos(TG1 + TG2) * 100  
            GJambeHeight.F = Sin(TG1 + TG2) * 100  
            GChevilleX.F = GJambeX + GJambeWidth
            GChevilleY.F = GJambeY + GJambeHeight
            GChevilleWidth.F = Cos(TG1 + TG2 + TG3) * 10
            GChevilleHeight.F = Sin(TG1 + TG2 + TG3) * 10
            GTalonX.F = GChevilleX + GChevilleWidth
            GTalonY.F = GChevilleY + GChevilleHeight
            GTalonWidth.F = Cos(TG1 + TG2 + TG3 + TG4) * 5
            GTalonHeight.F = Sin(TG1 + TG2 + TG3 + TG4) * 5
            GPiedX.F = GChevilleX + GChevilleWidth
            GPiedY.F = GChevilleY + GChevilleHeight
            GPiedWidth.F = Cos(TG1 + TG2 + TG3 + TG5) * 20
            GPiedHeight.F = Sin(TG1 + TG2 + TG3 + TG5) * 20
            GOrteilX.F = GPiedX + GPiedWidth
            GOrteilY.F = GPiedY + GPiedHeight
            GOrteilWidth.F = Cos(TG1 + TG2 + TG3 + TG5 + TG6) * 10
            GOrteilHeight.F = Sin(TG1 + TG2 + TG3 + TG5 + TG6) * 10

            DisplaySprite(\BackFrame, 0, 0)
            StartDrawing(ScreenOutput() )
               Line(DCuisseX, DCuisseY, DCuisseWidth, DCuisseHeight, #White)
               Line(DJambeX, DJambeY, DJambeWidth, DJambeHeight, #White)
               Line(DChevilleX, DChevilleY, DChevilleWidth, DChevilleHeight, #White)
               Line(DTalonX, DTalonY, DTalonWidth, DTalonHeight, #White)
               Line(DPiedX, DPiedY, DPiedWidth, DPiedHeight, #White)
               Line(DOrteilX, DOrteilY, DOrteilWidth, DOrteilHeight, #White)

               Line(GCuisseX, GCuisseY, GCuisseWidth, GCuisseHeight, #White)
               Line(GJambeX, GJambeY, GJambeWidth, GJambeHeight, #White)
               Line(GChevilleX, GChevilleY, GChevilleWidth, GChevilleHeight, #White)
               Line(GTalonX, GTalonY, GTalonWidth, GTalonHeight, #White)
               Line(GPiedX, GPiedY, GPiedWidth, GPiedHeight, #White)
               Line(GOrteilX, GOrteilY, GOrteilWidth, GOrteilHeight, #White)
            StopDrawing()
            FlipBuffers()
            If IsScreenActive()
               ExamineKeyboard()   
               If KeyboardPushed(#PB_Key_Escape)
                  \Quit = 1
               EndIf
               ExamineMouse()
               T0V + MouseWheel() / 100.0
            EndIf
         Until \Quit
      CloseScreen()
      \ScreenOpened = 0
      \ScreenClosed = 1
   EndWith
EndProcedure 

Procedure Graph(*Graph.GraphInfo)
   *Graph\ThreadNo = CreateThread(@GraphProcess(), *Graph)
EndProcedure

   Define Graph.GraphInfo

   Graph(Graph)

   Repeat 
      Delay(1)
      If IsThread(Graph\ThreadNo) = 0
         Break
      EndIf
   ForEver

   End
   
   
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Message par Frenchy Pilou »

Donc moins j'avance plus vite, plus je me fatigue plus
:D
Pour le moins étonnant :wink:

PS le truc rigolo, on peut faire de la course en marche arrière :)
Est beau ce qui plaît sans concept :)
Speedy Galerie
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

excellent ! :D
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Trop fort, il ne manque que la casquette de facteur avec un gros chien qui lui coure derrière :lol:
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message par Thyphoon »

Tient j'avais raté ce sujet ! Excellent ! Tu as repris le code quelque part ou bien c'est du Ollivier 100%? En tout cas c'est très sympa, manque plus que faire le bonhomme tout entier et en faire un jeu .. :P Au moins les mouvements seront fluide :)
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

Tu as repris le code quelque part ou bien c'est du Ollivier 100%?
100%! C'est simple, si en sortant de chez toi, tu veux courir, tu dois prévenir et demander à Dobro pour qu'il t'autorise à imiter les gestes brèvetés décrits ci-dessus (Ceci est bien entendu l'une des nombreuses conneries que je veux balancer à longueur de temps...)

Plus sérieusement, j'aimerais bien vous montrer l'arbre des mouvements morphologiques de course mais là, je vous balance un code gros comme une maison: j'arrive pas à mettre ces p... de gadgets3D et Window3D, ce qui simplifieraient énormément le schmilblick...

Ollivier
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Ollivier a écrit : 100%! C'est simple, si en sortant de chez toi, tu veux courir, tu dois prévenir et demander à Dobro pour qu'il t'autorise à imiter les gestes brèvetés décrits ci-dessus
développe , tu n'es pas tres clair .
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

@Dobro

Punaise! T'as raison, je croyais que t'avais la mouche du matin mais il y a une toute petite faute qui s'est glissé dans ma vanne à deux balles, et ça change méchamment le contexte:

« (Ceci est bien entendu l'une des nombreuses conneries que je peux balancer à longueur de temps...) »

Je crois que c'est un doigt plus clair! :D

Ollivier
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Course à pied : 18 Km/h

Message par Ollivier »

Même course en version 4.50...
Avatar de l’utilisateur
venom
Messages : 3137
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Course à pied : 18 Km/h

Message par venom »

ça plante chez moi en pb 4.50 x64
ça ce met en plein écran, puis rien écran noir touche windows pour réduire la fenêtre et fermer le programme avec l'IDE. :?


EDIT: c'est bon j'ai du mettre directx7 en sub systeme :wink:
en effet sympa tout ça.



@++
Dernière modification par venom le dim. 08/août/2010 11:14, modifié 1 fois.
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: Course à pied : 18 Km/h

Message par TazNormand »

Tu sais que ton code pourrait faire partie du PurePunch 2010 !!!

Manque plus que le petit corps, les bras et la tête, tu nous pond tout ça en 200 lignes max (je sais que tu sais faire, au vu de tes précédents codes) et tu as de bonnes chance de gagner sans media :wink:

En tout cas je découvre ce code 1 an après, et je le trouve génial.

Bravo
Image
Image
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Course à pied : 18 Km/h

Message par Ollivier »

Code : Tout sélectionner

Global Dim T.F(6)
Procedure.F Sum(n.I)
  For I = 1 To n
    Result.F + T(I)
  Next I
  ProcedureReturn Result
EndProcedure  
      InitSprite()
      InitKeyboard()
      InitMouse()
      OpenScreen(800, 600, 32, "")
      BackFrame.I = CreateSprite(#PB_Any, 800, 600)
      StartDrawing(SpriteOutput(BackFrame) )
         Box(0, 0, 800, 600, RGB(1, 1, 1) )
      StopDrawing()
      T0V.F = 0.1
      Dim X.F(6)
      Dim Y.F(6)
      Dim W.F(6)
      Dim H.F(6)
      Dim L.F(6)
      L(1) = 100.0
      L(2) = 100.0
      L(3) = 10.0
      L(4) = 5.0
      L(5) = 25.0
      L(6) = 10.0
         Repeat
            Delay(1)
            DisplaySprite(BackFrame, 0, 0)
            StartDrawing(ScreenOutput() )
            TB0.F + T0V
            For I = 0 To 1
              T(0) = TB0 + #PI * I
              T(1) = Sin(T(0) ) * 0.4 + #PI / 2.0
              T(2) = Sin(T(0) - #PI / 2.0) * 1.0 + 1.0
              T(3) = Sin(T(0) ) * 0.5 + 0.5
              T(4) = #PI / 2.0
              T(5) = #PI
              T(6) = Sin(T(0) - #PI / 2.0) * 1.0
              W(0) = Cos(T(0) + #PI / 4.0) * 10
              H(0) = Sin(T(0) + #PI / 4.0) * 10
              For J = 1 To 6
                X(J) = X(J - 1) + W(J - 1)
                Y(J) = Y(J - 1) + H(J - 1)
                S.F = Sum(J) - (J > 4) * T(4)
                W(J) = Cos(Sum(J) ) * L(J)
                H(J) = Sin(Sum(J) ) * L(J)
                Line(X(J), Y(J), W(J), H(J), #White)
              Next J
            Next
            StopDrawing()
            FlipBuffers()
            ExamineKeyboard()   
            ExamineMouse()
            X(0) = MouseX()
            Y(0) = MouseY()
            T0V + MouseWheel() / 100.0
         Until KeyboardPushed(#PB_Key_Escape)
      CloseScreen()
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Course à pied : 18 Km/h

Message par Ollivier »

Je serai franchement plus heureux dans ma vie si ce code pouvait servir à des amputés. Et comme tu le dis, ben ça fait déjà un an. Voilà...

Ollivier
Répondre