pour ceux qui ne connaissent pas , il s'agit d'une theorie (fumeuse) qui dit que
depuis le jour de notre naissance, nous vivons une succession de "haut" et de "bas"
calculé d'apres une sinuzoide
il y a la courbes :
"Physique" qui représente notre forme physique du moment, calculé sur une periode de 23 jours
"emotif" qui représente notre moral du moment, calculé sur une periode de 28 jours
"intellectuel" qui représente notre reactivité intellectuel du moment, calculé sur une période de 33 jours
donc on calcul le nombre de jours depuis la naissance, jusqu'au jour qu'on veux observer
et on applique la sinuzoidale en fonction de la periode de 23,28 ou 33 jours
pour afficher les 3 courbes, sur un segment de 28 jours , histoire de voir ou l'on en est ..
le Zero represente la date recherchée ...
en espérant ne pas trop m'etre viandé dans mes calculs savants ,(je laisse les matheux s'amuser avec au cas ou )
voici ce que ça donne
Icone pour le prg :
Code : Tout sélectionner
;***********************************************
;Titre :*biorythme
;Auteur : Zorro
;Date :07/08/2016
;Heure :14:23:22
;Version Purebasic : PureBasic 5.50 (Windows - x86)
;Version de l'editeur :EPB V2.64
; Libairies necessaire : Aucune
;***********************************************
Declare bissextile(annee)
Declare nbjourannee(date1.s, date2.s)
Declare nbjanvier(ldate.s)
Declare nbjour(date1.s, date2.s)
Enumeration
#win
EndEnumeration
InitKeyboard() :; j'espere qu'il y a un clavier au moins !!
Resultat = InitMouse()
; ***********************************
Resultat = InitSprite()
OpenWindow(#win, 0, 0,800, 600, "Biorythm", #PB_Window_SystemMenu|#PB_Window_BorderLess |#PB_Window_ScreenCentered )
Result = OpenWindowedScreen(WindowID(#win),0,0, 800,600, 1, 0,0)
;
;date_de_naissance.s="14/09/2016" ; pour que le calcul commence a cette date (la date de naissance !! )
; annee=val(stringfield(date_de_naissance.s,3,"/"))
; mois=val(stringfield(date_de_naissance.s,2,"/"))
; jjoouur=val(stringfield(date_de_naissance.s,1,"/"))
; la courbe se repete tout les 21 252 jours (14 février 2023 pour le 8 decembre 1964)
;20/03/2017
date_de_naissance.s=InputRequester("", "Date de naissance", "08/12/1964"); pour que le calcul commence a cette date
;date_a_calculer.s="14/02/2023" ; représentée par "0" sur le graphique ; cette date represente le 08/12/1964+21252 jours, qui met en evidence le jointement de la courbe
date_a_calculer.s=FormatDate("%dd/%mm/%yyyy", Date())
SetWindowTitle (#win,"Biorythm 0="+date_a_calculer.s)
; recul de 15 jours
;date_de_naissance.s=FormatDate("%dd/%mm/%yyyy", AddDate(Date(annee, mois, jjoouur, 14, 00, 00), #PB_Date_Day, -15)) ; recul de 15 jours
;calldebugger
nbr_jour=nbjour(date_de_naissance.s,date_a_calculer.s)
jour=31
compteur_j=-8
Y=300 ;Position en y du dessin
amplitude.f=200 ;amplitude du dessin
jj.f=(799/jour) ; espace entre les trait verticaux
; Dessin de la grille
StartDrawing(ScreenOutput())
If nbr_jour<=jour:nbr_jour=jour:Endif
LineXY(1, Y,799, Y ,RGB(255,255,0)); ligne horizontale
For L=1 to 799
LineXY(L, 1, L, 599 ,RGB(255,255,0))
dd=compteur_j; dd=(-jour/2)+compteur_j ;
DrawText(L,580,str(dd),Rgb(255,255,255),$0)
compteur_j=compteur_j+1
DrawText(10,10,"Physique",RGB(50,50,255),$0)
DrawText(10,30,"emotif",RGB(255,50,0),$0)
DrawText(10,50,"intellect",RGB(50,255,50),$0)
L=L+jj
Next L
; *********************************************************
Flag_play=#False
compteur=1
If nbr_jour>jour
For x=1 To nbr_jour
ii=ii+jour
Next x
Endif
;
For x=1 To ((nbr_jour) * jj)
phys.f=Y+ amplitude* Sin((jour/2)*(#PI/180)*(-x/23)-(ii/23))
emo.f=Y + amplitude* Sin((jour/2)*(#PI/180)*(-x/28));-(ii/28))
intel.f= Y + amplitude* Sin((jour/2)*(#PI/180)*(-x/33));-(ii/33))
if x= (nbr_jour-(jour-31)) ; on affiche seulement les 31 derniers jours du calcul de -15 a +16
Flag_play=#true
Endif
if Flag_play=#true
compteur=compteur+1
circle( compteur, phys.f,2 ,RGB(50,50,255)) ; physic
circle(compteur, emo.f,2 ,RGB(255,50,0)) ; emotif
circle(compteur, intel.f,2 ,RGB(50,255,50)) ; intel
Endif
Next x
StopDrawing()
;
Repeat
Event=WindowEvent()
ExamineKeyboard()
ExamineMouse()
If MouseButton(#PB_MouseButton_Right)
; le clic bouto droit fera quitter !
End
EndIf
FlipBuffers():; affiche l'ecran
;ClearScreen(RGB(0, 0, 0)) :;efface l'ecran
Until Event=#PB_Event_CloseWindow Or KeyboardPushed( #PB_Key_Escape) ; press touche droit
;
Procedure bissextile(annee)
If (annee % 4 = 0 And annee % 100 <> 0) Or annee % 400 = 0
bissextile= #True
Else
bissextile = #False
EndIf
ProcedureReturn bissextile
EndProcedure
Debug bissextile(2007)
;
;Calcul du nombre de jours pour chaque année séparant les deux dates
Procedure nbjourannee(date1.s, date2.s)
a1 = Val(StringField(date1,3,"/"))
a2 = Val(StringField(date2,3,"/"))
If (a1 = a2)
nbjourannee = 0
Else
i = a1
nbjourannee = 0
While (i < a2)
nbjourannee = nbjourannee + 365
If (bissextile(i))
nbjourannee = nbjourannee + 1
EndIf
i = i + 1
Wend
EndIf
ProcedureReturn nbjourannee
EndProcedure
;
;Calcul du nombre de jours par rapport au premier janvier de la date
Procedure nbjanvier(ldate.s)
nbmois.s = "0,31,59,90,120,151,181,212,243,273,304,334"
j =Val( StringField(ldate,1,"/"))
m = Val(StringField(ldate,2,"/"))
a = Val(StringField(ldate,3,"/"))
nbjanvier =Val(StringField(nbmois,m,",") )+ j - 1
If (bissextile(a) And m > 2)
nbjanvier = nbjanvier + 1
EndIf
ProcedureReturn nbjanvier
EndProcedure
;
;Calcul du nombre de jours entre deux dates
Procedure nbjour(date1.s, date2.s)
nbjour = nbjourannee(date1.s, date2.s) - nbjanvier(date1.s) + nbjanvier(date2.s)
ProcedureReturn nbjour
EndProcedure
;Epb