Zdravim,
tka si rikam, ze jsem to prekombinoval. Takze to zkusim jeste jednou shrnout. Ty predchozi dva maily ignoruj. :-)

Zakladem je pocitani funkcnich hodnot v referencnich bodech. Tech muze byt treba 100, treba 150.. Urcite by mela byt moznost jejich pocet nastavit.

Pokud jde o zmenu meritka, treba priblizeni, tak to zalezi, jak to resit.. Osobne mi prijde nejlepsi mit omezeny rozsah os. Pri zmene meritke se samozrejme zmensi/zvetsi a funkce se prepocitaji aby odpovidaly novemu rozsahu (take by bylo mozne pouze doplnit ty stavajici o body nove). Pokud se bude jen posouvat po osach pri zachovani meritka, pak by stacilo jen dopocitavat tu cast funkce, co lezela doposud mimo (a tu co je ted mimo zahodit). To znamena, ze u kazde funkce mam seznam referencnich bodu a jejich funkcni hodnoty.

Pokud jde o nespojite funkce ci jenom funkce, ktere jsou hodne divoke (treba sin(1/x)), tak pro toto se pouziva adaptivni skalovani, tedy lokalni zvyseni poctu referencnich bodu. Problemem trochu je, jak takovouto divokou funkci poznat.

Napadlo me jeste toto: Referencni body mi rozdeli zakladni interval na nekolik delicich intervalu. Na techto intervalech bych funkci aproximoval useckou (celkem tedy lomenou carou). Z teto usecky udelam vektor a budu zjistovat, jaky uhel sviraji dva sousedni vektory (tedy jak moc se funkce krouti). Pokud tento uhel prekroci nejakou hranici (treba 5 stupnu, nebo i mene), tak ty dva intervaly zjemnim vetsim poctem delicich bodu (z puvodnich dvou intervalu udelam ctyri).

Pak jsou tu jeste tyto veci:
- Kdyz mi funkce v obou krajnich bodech intervalu vyskoci mimo rozsah grafu, tak prostredek ignoruji (tyto bodu pri kresleni grafu nespojuji). - Kdyz je svirany uhel stale velky a pritom uz jsou referencni body velmi blizko u sebe (vzdalenost odpovida treba jen jednomu ci dvoum pixelum v grafu), tak to bych to asi ty body na tech dvou intervalech nespojoval.

Takze to je asi moje predstava. Akorat to pocitani nebude uplne nejrychlejsi (ikdyz urcite pujde upravit je na nasobeni a scitani). Ale zalezi, jaky mas priority. :-) Rekl bych, ze kolikrat se spis vyplati mit vice referencnich bodu, jde o to, jak moc slozita je ta funkce.

Takze tak, uz toho radsi necham, at nejsem ostatnim pro smich. :-)

Karel


Jakub Vojacek napsal(a):
Zdravím
Začal jsem pracovat na lepším prostředí pro správu grafů v programu Math Atelier a potřeboval bych trochu poradit s určitými problémy (gui je dělané pomocí wx). 1) Momentálně je pracovní plocha na výkres grafů velká 1000 x 1000 jednotek (pixelů). Akorát výpočet trvá celkem dlouhou dobu a uživatel by mohl potřebovat menší či větší plochu, takže se ptám jestli je dobré nabízet možnost jak velkou pracovní plochu mít. 2) Nevím jak vy byste vypočítávali body pro vykreslení grafu, ale já na to mám takovoutu metodu: cislo=spodni_hranice
while cislo < horni_hranice:
       x=cislo
       y=eval(funkce.replace('x',cislo))
       body.append([x,y])
       cislo=cislo+preciznost
Ale výpočet se mi zdá poměrně dlouhý a tak se ptám jesetli vás nenapadá něco efektivnějšího. Dále jakou hodnotu by měla mít proměnná preciznost (nebo jestli by měl mít uživatel možnost ji nastavit). 3) Nyní program dostává body jako souřadnice x,y a vykresluje jednotlivé pixely. Pochopitelně je to způsob relativně nepřehledný, protože pak může být na plátně jenom několik nic neříkajicích teček a proto by je chtělo nějak spojit. Napadlo mě spojit každé dva vedlejší body čárou ale pak mi došlo že to je nemožné, například kvůli grafu 1/cos(x). Nevíte jaký způsob používají jiné programy? Děkuji za případné odpovědi. Jakub Vojáček.
_______________________________________________
Python mailing list
python@py.cz
http://www.py.cz/mailman/listinfo/python

Visit: http://www.py.cz

Odpovedet emailem