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