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