[PHP] Jak policzyć biorytmy dla dowolnego dnia?
Chcesz obliczyć biorytm emocjonalny, fizyczny i psychiczny dla określonego dnia, tak jak wyliczony poniżej biorytm dla mnie (na dzisiaj):
Żyję 10994 dni
Dzień cyklu intelektualnego: 6, biorytm intelektualny: 81
Dzień cyklu emocjonalnego: 19, biorytm emocjonalny: -78
Dzień cyklu fizycznego: 1, biorytm fizyczny: 0
Biorytmy to wyliczone przez naukowców cykle największej aktywności fizycznej, intelektualnej i emocjonalnej człowieka, które powtarzają się co określoną liczbę dni. Na przestrzeni tego czasu aktywność określonego biorytmu wzrasta i maleje, poruszając się pomiędzy maksymalną (100%) i minimalną wartością (-100%) niczym sinusioda.
Zwykle dla uproszczenia przyjmuje się zakres wartości biorytmu od 100 do -100, gdzie 0 jest stanem neutralnym - aktywność nie jest ani podwyższona ani osłabiona. Wartość 100 oznacza maksymalną aktywność dla danego cyklu, a -100 to najgorszy dzień dla cyklu np. fizycznego i teoretycznie lepiej nie brać się wtedy za uprawianie sportu.
Biorytm zaczyna "pracować" od chwili narodzin - tak mówią naukowcy, a więc znając długości cyklu dla każdego biorytmu można wyznaczyć go dla dowolnego dnia, jeżeli znasz datę swoich urodzin (znasz, prawda?).
Możesz więc nie tylko obliczyć, jakie wartości biorytmów występują dzisiaj, ale też jakie będą za tydzień, jakie były wczoraj czy jakie będą w chwili wyjazdu na upragniony urlop.
Osobiście nie wierzę w biorytmy, bo moim zdaniem nie cyferki świadczą o samopoczuciu i możliwościach tkwiących w człowieku, ale jeżeli lubisz takie historie (lub użytkownicy Twojego serwisu je lubią) to biorytm będzie wyśmienitym urozmaiceniem nudnej czasem rzeczywistości. Zobacz jak go wyliczyć:
<?
// urodziny
$dzien=7;
$miesiac=4;
$rok=1974;
$teraz=gmmktime(); // liczymy biorytm dla dnia dzisiejszego
$urodziny=gmmktime(12,00,00,$miesiac,$dzien,$rok);
$dni = (int)(($teraz-$urodziny)/60/60/24);
function biorytm($cykl, $dzien) {
return (int)(sin($dzien%$cykl/$cykl*2*M_PI)*100);
}
echo "<br>Żyjesz już $dni dni";
echo "<br>Dzień cyklu intelektualnego: ".($dni%33+1);
echo ", biorytm intelektualny: ".biorytm(33,$dni);
echo "<br>Dzień cyklu emocjonalnego: ".($dni%28+1);
echo ", biorytm emocjonalny: ".biorytm(28,$dni);
echo "<br>Dzień cyklu fizycznego: ".($dni%23+1);
echo ", biorytm fizyczny: ".biorytm(23,$dni);
?>
Każdy biorytm ma swój cykl. Trwa on 33 dni dla biorytmu intelektualonego, 28 dla emocjonalnego i 23 dni dla fizycznego. Aby wyznaczyć biorytm na określony dzień najlepiej policzyć ile dni minęło od chwili narodzin do dnia, dla którego chcesz obliczyć biorytm.
Odejmując od chwili obecnej (gmmktime()) datę urodzin i dzieląc tą wartość przez liczbę sekund, minut i godzin otrzymam liczbę dni, jakie minęły od moich urodzin. Liczbę tą przechowuję w zmiennej $dni.
Przyda się pomocnicza funkcja biorytm(), która na podstawie dni i długości cyklu wyliczy wartość biorytmu dla podanego dnia. Obliczanie biorytmu to nic innego, jak odwzorowanie pozycji cyklu na sinusoidzie w określonym dniu. Wystarczy więc podstawić do sinusa dni z aktualnego cyklu (dzielenie modulo), podzielić przez długość cyklu i pomnożyć przez 2PI.
Ponieważ sinus daje wartości z zakresu od -1 do 1 mnożę wynik przez 100 aby otrzymać zakres od -100 do 100. Teraz podstawiając liczby mogę wyliczyć wartości biorytmów dla dowolnego cyklu.
Dodatkowo obliczam dzień cyklu, czyli dzielę dzień przez cykl (dzielenie modulo) i do reszty dodaję jeden dzień (wynik modulo podaje wartości od 0). I gotowe, mamy biorytmy wyliczone.
Jeżeli odejmiesz od zmiennej $dni 1 dzień, otrzymasz wynik dla wczorajszego dnia, jeżeli dodasz 7 dni, zobaczysz w jakim stanie będziesz za tydzień.
Ponieważ możesz obliczyć w ten sposób wartości biorytmów dla dowolnego dnia, możesz rysować wykresy, a więc linie łączące punkty dla określonego przedziału czasu.
Możesz sobie też wyliczyć np. średnią z trzech biorytmów:
<?
echo "<br>Średnia biorytmów: ";
echo (int)((biorytm(33,$dni)+biorytm(28,$dni)+biorytm(23,$dni))/3);
?>