Biorytmy.


Dokładniejszy opis tego i innych programów znajdą Państwo w książce pt: "C++ Builder. Symulacje komputerowe", Helion, 2003.



Najważniejsze idee
Algorytmy
Biorytmy nr 1
Biorytmy nr 2


Strona domowa ...

Istnieje pogląd, że pierwszy dzień życia człowieka to zarazem bardzo głęboki jego kryzys. Dopiero co urodzone dziecko ma bardzo niską sprawność fizyczną, intelektualną i emocjonalną. Istnieje też pogląd, że sprawność fizyczna, intelektualna i emocjonalna zmieniają się cyklicznie, ze stałymi okresami, aż do końca życia.

Skoro tak, to każde z nas może wysnuć ze swojego dnia urodzenia aż do dzisiaj trzy sinusoidy i zobaczyć w jakiej fazie sprawności akurat się znajduje. Czy nasze sinusoidy dzisiaj mają górki, czy może dołki?

Kiedyś pokazałem biorytm koledze. Jutro zapowiadało się fatalne - zbiegały się tam trzy głębokie doły sinusoid. Pokazał biorytm swojemu szefowi, a ten pozwolił mu nie przyjść do pracy. Stąd wniosek, że koło biorytmów nie powinniśmy przechodzić całkowicie obojętnie...

Najważniejsze idee



Wysnuwanie sinusoid z dnia urodzenia aż do dzisiaj wymaga umiejętności obliczania liczby dni, dzielących dwie daty. Jest to złożone i nieprzyjemne zagadnienie, ale na szczęście w bibliotekach kompilatorów C++ Builder i Delphi znajduje się obiekt, realizujący różne operacje na datach:
...
TDateTime data_urodzenia( unsigned short r, unsigned short m, unsigned short d);
double il_dni_zycia = TDateTime().CurrentDate().Val - data_urodzenia.Val;
...

W powyższym skrawku algorytmu najpierw deklarujemy zmienną obiektową data_urodzenia obiektowego typu TDateTime. Linia deklaracji sugeruje, że w obiekcie TDateTime znajduje się bardzo oczekiwany konstruktor:

TDateTime( rok, miesiąc, dzień);

To bardzo dobrze. Ale mało tego - jest tam jeszcze funkcja CurrentDate(), odczytująca z zegara systemowego datę dzisiejszą. Ale nadal mało tego - jest jeszcze możliwość obliczania liczby dni między dwoma datami, tutaj między datą dzisiejszą a datą urodzenia. Zmienna il_dni_życia niesie informację o liczbie dni od urodzenia do dzisiaj.

Teraz potrafimy już wyliczać, a zatem i kreślić prosty przebieg sinusoidalny dla fal emocji, intelektu i sprawności fizycznej. Fale te - jak powszechnie wiadomo - mają różne okresy.

//  Wartość sinusoidy o okresie 'cykl' w 'nr' dniu życia.
//  Funkcja ma minimum (=-1) dla dnia nr=0.
//  Stała M_PI jest zdefiniowana w pliku math.h
double TForm1 :: daj_bio_wartosc( int cykl, double nr)
{
 return sin( 2. * M_PI * nr / (double)cykl - M_PI / 2.);
}

Patrząc na powyższe formalnie, powiemy że okres sinusoidy wynosi cykl dni, zaś jej faza początkowa jest równa pi/2.

Algorytmy



Dysponując bio-wartością wykreślimy bio-linię wartości. Zastosujmy przy tym bardziej złożony algorytm kreślenia krzywej odcinkami linii (a nie punktami):

//  Wykreślenie pojedynczej sinusoidy
void TForm1 :: kresl_bio_linie( int cykl, TDiagram diag, TColor kolor)
{
 int xe_old, ye_old, xe, ye;    //punkt poprzedni i bieżący wykresu
 bool pierwszy_punkt = true;    //pierwszy odcinek nie ma początku ..
 double nr;
 for( nr = il_dni_zycia - zakres; nr <= il_dni_zycia + zakres; nr ++)
 {
    xe = diag.daj_ekr_x( nr);
    ye = diag.daj_ekr_y( daj_bio_wartosc( cykl, nr));
    if( pierwszy_punkt)         //Początek wykresu? Bez linii
    {
       Canvas -> Pixels[ xe][ ye] = kolor;
       pierwszy_punkt = false;
    }
    else                        //Kontynuacja linii wykresu
    {
       Canvas -> Pen -> Color = kolor;
       Canvas -> MoveTo( xe_old, ye_old);
       Canvas -> LineTo( xe, ye);
    }
    xe_old = xe;
    ye_old = ye;
 }
}

Sinusoid nie kreślimy oczywiście aż od dnia urodzenia - nikogo nie interesuje przecież dyspozycja 20 lat temu - a na dystansie kilku tygodni przed i po dacie dzisiejszej. Rozległość podglądanego obszaru czasowego jest parametrem zadawanym przez użytkownika programu, tutaj ukrytym w zmiennej zakres.

Biorytm nr 1



Trzem cyklom aktywności odpowiadają trzy sinusoidy, wysnute z momentu naszych urodzin, kiedy to mieliśmy okropny, potrójny kryzys. Nasz algorytm potrafi przedłużyć je daleko w przyszłość. Od dzisiaj zawsze skonfrontuj swoje zamierzenia z komputerową oceną swojej sprawności. Wkrótce powinieneś zauważyć, że coraz więcej Twoich przedsięwzięć kończy się sukcesem, coraz rzadziej zdarzają się wstydliwe porażki. W Twoim życiu pojawiła się strategia. Po prostu znasz przyszłość ...

Tu są pliki tego programu w C++ Builder (8 kB)

A tutaj gotowy program (147 kB)

Biorytm nr 2



Trzy cykle sprawności człowieka mają różne okresy i z tego powodu poziomy dyspozycji w trzech rozważanych dziedzinach nakładają się w coraz to innych fazach. Gdy jesteśmy wysoce sprawni fizycznie, może brakować nam intelektualnej ogłady. Z powodu tego pomieszania może więc wprowadzić parametr dyspozycja, który będzie sumą wszystkich trzech przebiegów sprawności? Jeśli na takim globalnym wykresie będziemy mieć maksimum, to znaczy, że emocjonalnie, intelektualnie i fizycznie jesteśmy bez zarzutu. Wtedy możemy mierzyć siły na zamiary. Minimum też łatwo zinterpretować - nie powinniśmy wychodzić z domu, bo ani fizycznie, ani emocjonalnie, ani intelektualnie nie odpowiadamy przyjętym normom ...

Tu są pliki tego programu w C++ Builder (8 kB)

A tutaj gotowy program (147 kB)

(c) Astar'05, 2003.09.01