OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů

Prijdte se bavit!

Právě je 28.10.2021, 23:52

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 52 ]  Přejít na stránku 1, 2, 3, 4  Další
Autor Zpráva
PříspěvekNapsal: 02.03.2021, 11:05 
Offline
Kecálek

Registrován: 28.11.2020, 19:52
Příspěvky: 119
Has thanked: 9 times
Been thanked: 12 times
Mali sme tu už Mandelbrotové množiny, fraktály, plasmy, monoskop, no je tu ďalší zaujímavý program, na ktorý sa tiež čaká veľmi dlho. Je to efekt, pri ktorom keď spadne kamienok do vody, vytvoria sa vlny od jeho vpádu, no podľa mňa nesprávne pomenovaný ako Bublina :)


Přílohy:
bublina.jpg
bublina.jpg [ 53.15 KiB | Zobrazeno 4560 krát ]
Nahoru
 Profil  
 
PříspěvekNapsal: 02.03.2021, 11:40 
Online
Pan Generální
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 2446
Has thanked: 149 times
Been thanked: 242 times
Na PMD 85 to trvá pokud se dobře pamatuju mezi 30 - 60 minutami, je to poněkud dlouhé. Nicméně mandelbrot v Basicu s jeho 24 hodinami to zcela jistě nedá :-D.


Nahoru
 Profil  
 
PříspěvekNapsal: 02.03.2021, 12:44 
Offline
Kecálek

Registrován: 28.11.2020, 19:52
Příspěvky: 119
Has thanked: 9 times
Been thanked: 12 times
Presne tak, tu je výsledok po hodine.


Přílohy:
Poznámka: a samotný program
bublina.zip [394 bajtů]
107 krát
bublina.jpg
bublina.jpg [ 175.98 KiB | Zobrazeno 4525 krát ]
Nahoru
 Profil  
 
PříspěvekNapsal: 02.03.2021, 14:33 
Online
Pan Generální
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 2446
Has thanked: 149 times
Been thanked: 242 times
Tak PMD s plotrem XY-4131 to trvá cca 90 minut, plotr patrně poněkud zdržuje :-). Jedna linka se kreslí cca 47 sekund... Mám knížku, původně pro PMD 85-1 s Basicovými programy podobného typu a program Bublina je jeden z nich. Autor tam lehce krypticky píše že se máme výstupem programu nechat překvapit, takže matoucí název je patrně trochu záměr :-). Takže další velké tajemství rodiny počítačů PMD odhaleno :jump:

Jinak machrovinka by byla úprava co by kreslila jenom viditelné věci a věci neviditelné přeskakovala á la Z-buffer :-).


Přílohy:
Hotovo.JPEG
Hotovo.JPEG [ 195.84 KiB | Zobrazeno 4484 krát ]
Nahoru
 Profil  
 
PříspěvekNapsal: 02.03.2021, 19:42 
Offline
Radil

Registrován: 28.07.2018, 14:37
Příspěvky: 538
Has thanked: 9 times
Been thanked: 212 times
Protože BASIC hodně času ztrácí "hledáním" začátků řádků a vyčíslováním přehledně zapsaných výrazů, je dobré se od toho oprostit. Pouhou úpravou výše uvedeného kódu v BASICu (díky Joeymu78, že jej přepsal) došlo k poklesu časové náročnosti na 59% původní hodnoty. Vypadá to teď nějak takto:

Kód:
100 GCLEAR:SCALE-20,30,-20,30
110 FORY=-20TO20STEP.5:FORX=-40TO30STEP.5:R=SQR(X*X+Y*Y)
120 IFR=0THENPLOTY/2+8.5,Y+20:NEXTX:MOVE-20,-20:NEXTY
130 PLOTY/2+X+8.5,20+SIN(R)/R*20+Y:NEXTX:MOVE-20,-20:NEXTY


A to jsme pořád v BASICu. Chlapi, neházejte ty rukavice na zem. Kdo to má pořád zvedat ?


PS: Až teď jsem si všiml, že zbytek řádku 120 za příkazem NEXTX je asi zbytečný.. Ale na čas to vliv mít nebude.


Nahoru
 Profil  
 
PříspěvekNapsal: 02.03.2021, 20:34 
Offline
Radil

Registrován: 28.07.2018, 14:37
Příspěvky: 538
Has thanked: 9 times
Been thanked: 212 times
Protože jsem dělal ještě následné pokusy s urychlováním předchozí úlohy v BASICu, musím v zájmu vědecké pravdy uvést, že téměř veškerou úsporu času má na svědomí jediná věc.

změna výrazu (X^2+Y^2) na výraz (X*X+Y*Y)

Ten první výraz se totiž zcela určitě počítá náhradním způsobem jako (EXP(2*LOG(X)) + EXP(2*LOG(Y)) ) a dvojí výpočet těch logaritmů a exponenciál asi dělá tu primární paseku. A proč se to interně počítá přes logaritmy? Určitě ne kvůli druhých či třetích mocnin. Je to proto, že obecnou mocninu jinak jednoduše vypočítat nelze. Tedy když je mocnitel neceločíselný či k tomu ještě záporný.

Ten zbytek úprav programu, tedy koncentrace řádků a podobně, tak to nemá praktický vliv. Jsem zase jednou teoretizoval...

Zde ještě fragment BASICu z PMD-85 s důkazem:

Kód:
X1384:  pop h           ; mocněnec do FP akumulátoru
        shld fpaccum+2
        pop h
        shld fpaccum

        cc X134b        ; pro liché hodnoty mocnitele
                        ; záporného mocněnce bude na závěr
                        ; výpočtu otočeno znaménko
        cz X10f0        ; záporný mocněnec vždy převést
                        ; na kladný
        push d          ; a nyní už počítáme podle předpisu
        push b
        call f_log      ; ..logaritmus mocněnce..
        pop b
        pop d

        call X0fc3      ; ..vynásobíme mocnitelem..

                        ; a použijeme jako exponent
                        ; funkce e^x

; *********************************************************
; funkce EXP - exponenciální funkce nad přirozeným základem
; *********************************************************
                        ; (139ch)
f_exp:  call pushfp     ; argument uložený v FP akumulátoru
        lxi b,8138h     ; a konstantu 1/ln(2)
        lxi d,0aa3bh    ; (přirozený logaritmus)
        call X0fc3      ; vzájemně vynásobit
                        ; =přechod z přirozeného na dvojkový
                        ; základ logaritmu


Nahoru
 Profil  
 
PříspěvekNapsal: 02.03.2021, 20:53 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 24.05.2018, 22:32
Příspěvky: 1415
Bydliště: Most, Praha
Has thanked: 409 times
Been thanked: 432 times
"Jsem chudý 3D program nemající na drahý hardware a proto potřebuji tvou pomoc. Nakresli na papír vlnky a řekni k tomu Žbluňk!" :D

Je překvapivé jak málo kódu stačí k zajímavému výstupu. :-)

Ještě je otázka zda pro SQR používají exp(log(a)/2) nebo Newtona. Newton bývá podstatně rychlejší. Možná by stál za úvahu zjednodušený Newton, zda to neurychlí?:
A=X*X+Y*Y
R=A/2
R=(R+A/R)/2
R=(R+A/R)/2
R=(R+A/R)/2

_________________
i++ (INC) increment
i-- (DEC) decrement
i@@ (EXC) excrement


Nahoru
 Profil  
 
PříspěvekNapsal: 02.03.2021, 20:59 
Offline
Radil

Registrován: 28.07.2018, 14:37
Příspěvky: 538
Has thanked: 9 times
Been thanked: 212 times
V uvedeném BASICu je výpočet SQR (druhá odmocnina) transformován na výpočet obecné mocniny s mocnitelem 0,5.

Tedy: SQR(X) => X^0,5


...a to na adrese 1350h...


Nahoru
 Profil  
 
PříspěvekNapsal: 02.03.2021, 21:08 
Online
Pan Generální
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 2446
Has thanked: 149 times
Been thanked: 242 times
Mohu potvrdit, že i na fyzickém plotru v některých částech dochází k takovému urychlení výpočtu, že pisátko zůstává dole a čára je více spojitá, resp. tečkovaná jak se pisátko nestačí stabilizovat a už dostává novou čočku ee porci dat :-). Odstraněním MOVE -20-20 se také dostáváme k tomu, že plotr začíná na stejném řádku co skončil a nejezdí do výchozí pozice. To bych řekl velice výrazně urychlí samotné kreslení, klidně o desítky procent.

Ten program je z knížky pro začátečníky, ne pro level advanced guru co sype z rukávu jaká adresa obsahuje vhodnější rutinu :-D. Ovšem díky za to, jsem rád že i Basicu se dá výrazně pomoct co se rychlosti týká oproti "standartnímu" přístupu.

Je tu zatím jen jediný rozdíl co jsem zatím zaznamenal - ten obrázek začíná fyzicky uprostřed stránky a ne na jejím spodku jako u originálu a cca v polovině mi to spadne na dělení nulou... Proč to tak je, zatím netuším.


Nahoru
 Profil  
 
PříspěvekNapsal: 02.03.2021, 21:12 
Offline
Radil

Registrován: 28.07.2018, 14:37
Příspěvky: 538
Has thanked: 9 times
Been thanked: 212 times
Nojo, mám tam chybu, kterou jsem neodstranil. Řádek 130 má navíc kus výrazu ...20+... a ten tam nepatří. Já jsem tu zkopíroval uloženou starší verzi s chybou. Omlouvám se.

Kód:
100 GCLEAR:SCALE-20,30,-20,30
110 FORY=-20TO20STEP.5:FORX=-40TO30STEP.5:R=SQR(X*X+Y*Y)
120 IFR=0THENPLOT8.5,20:NEXTX
130 PLOTY/2+X+8.5,SIN(R)/R*20+Y:NEXTX:MOVE-20,-20:NEXTY


Toto je správná verze. Doufám...


Naposledy upravil Libor L.A. dne 02.03.2021, 21:15, celkově upraveno 1

Nahoru
 Profil  
 
PříspěvekNapsal: 02.03.2021, 21:13 
Offline
Radil

Registrován: 15.01.2014, 20:08
Příspěvky: 471
Has thanked: 68 times
Been thanked: 56 times
Czech Human píše:
Jinak machrovinka by byla úprava co by kreslila jenom viditelné věci a věci neviditelné přeskakovala á la Z-buffer :-).

To jsem někde viděl psané v BASICu jen u toho byla požitá jiná funkce tj. variace na téma. Ale kde jsem to viděl, nemám páru …

_________________
Ne všichni jsme měli z češtiny za jedna, aneb jsem dyslektik a dysgrafik.

http://www.sapi.cz/


Nahoru
 Profil  
 
PříspěvekNapsal: 02.03.2021, 21:17 
Offline
Radil

Registrován: 28.07.2018, 14:37
Příspěvky: 538
Has thanked: 9 times
Been thanked: 212 times
Fraktálové hory, časopis VTM 10/1988: Modelujeme přírodní tvary – hory a počítač (program, str. 45)

Tam první část programu kreslila hory a druhá část odmazávala ty neviditelné hrany. Tedy měla odmazávat. Myslím, že tehdy mi ta druhá část nefungovala.


Nahoru
 Profil  
 
PříspěvekNapsal: 02.03.2021, 21:41 
Online
Pan Generální
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 2446
Has thanked: 149 times
Been thanked: 242 times
Ještě bych řekl že to MOVE -20,-20 na řádku 130 není nutné, plotr mi opět jezdí do začátku souřadnic, což stojí čas. Předchozí varianta jezdila jen rovně, což je u tohoto zázraku techniky výrazně rychlejší než vrčení šikmo do strany :-).


Nahoru
 Profil  
 
PříspěvekNapsal: 02.03.2021, 21:59 
Offline
Radil

Registrován: 03.07.2018, 23:06
Příspěvky: 322
Has thanked: 172 times
Been thanked: 205 times
> To jsem někde viděl psané v BASICu jen u toho byla požitá jiná funkce tj. variace na téma. Ale kde jsem to viděl, nemám páru …

Je to např. v knize Můj přítel Didaktik Gama, strana 78

https://web.archive.org/web/20160909001 ... daktik.pdf

_________________
Špóngiu navlhčiť


Nahoru
 Profil  
 
PříspěvekNapsal: 02.03.2021, 22:01 
Offline
Radil

Registrován: 28.07.2018, 14:37
Příspěvky: 538
Has thanked: 9 times
Been thanked: 212 times
Je-li MOVE -20,-20 v praxi zbytečné, pak je to zbytečné. Prostě praxe má přednost před teorií. V souladu s cítěním autora bych to tam ale na začátku vývoje dal, neboť teoreticky, opakuji TEORETICKY, hrozí riziko, že se budou kreslit ty zpětné běhy zprava doleva. Ale asi se to neděje z toho důvodu, že kreslení začíná vlevo na pozici X=-40 a tím pádem je koncový bod "zpětné" úsečky mimo obrazovku. Pokud se Ti objevuje chyba dělení nulou, možná Ti chybí NEXT X v řádku s podmínkou IF R=0....

Pokud nám nevadí mírně zkosený pravý dolní roh obrázku, proč nemít stejně uříznutý i ten levý horní? Zkrátí to dobu kreslení. Cyklus proměnné X pak nemusí začínat od -40, stačí jej dát od cca -35? S touto hodnotou lze beztrestně laborovat.


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 52 ]  Přejít na stránku 1, 2, 3, 4  Další

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 2 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz