OldComp.cz

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


Právě je 28.03.2024, 13:34

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




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 15 ] 
Autor Zpráva
 Předmět příspěvku: Rychlá kružnice z Bogobasicu
PříspěvekNapsal: 29.10.2016, 22:20 
Offline
Pan Generální
Uživatelský avatar

Registrován: 11.06.2013, 15:27
Příspěvky: 3025
Has thanked: 2191 times
Been thanked: 894 times
[EDIT: souvisejici - Vykresleni kruznice]

Urychlení a náhrada nedokonalého vykreslování kružnice na spektráči.
V příloze patchnutá romka i zdroják, který (s direktivou zápisu do ROM) lze přeložit přímo v assembleru emulátoru LnxSpectrum.


Přílohy:
zxs_fast-circle.7z [14.87 KiB]
498 krát
circle-bogobasic.png
circle-bogobasic.png [ 1.06 KiB | Zobrazeno 7750 krát ]
circle-zxs.png
circle-zxs.png [ 1.23 KiB | Zobrazeno 7750 krát ]

_________________
// na co myslím, když sedím u oldkompů: celý příběh
Nahoru
 Profil  
 
 Předmět příspěvku: Re: Rychlá kružnice z Bogobasicu
PříspěvekNapsal: 30.10.2016, 20:10 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3642
Bydliště: Bratislava
Has thanked: 371 times
Been thanked: 788 times
Zaujimava rutinka na kruznicu.
Spravil som jednoduchy test rychlosti - ako rychlo vie nakreslit sadu rozne velkych kruznic od polomeru 1 az po 88 (s krokom po 1).
A tato rutinka z Bogobasicu to zvladla 7.32 krat rychlejsie, co je celkom pekne.
Pre zaujimavost, tato rutinka bezi 47.44 krat rychlejsie. Ale zase na druhej strane nenastavuje atributy.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Rychlá kružnice z Bogobasicu
PříspěvekNapsal: 30.10.2016, 22:54 
Offline
Site Admin
Uživatelský avatar

Registrován: 11.05.2013, 23:48
Příspěvky: 10111
Bydliště: Praha
Has thanked: 1953 times
Been thanked: 1517 times
Existuje nějaké rozumné vysvětlení toho, kde udělali soudruzi z GB chybu, že výsledek příkazu CIRCLE v Sinclair BASICu nepřipomíná od určitého poloměru kružnici ani omylem?

_________________
Amiga/Amstrad/Atari/Commodore/Mac/Nintendo/PS/PC/Sega/Tandy/ZX


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Rychlá kružnice z Bogobasicu
PříspěvekNapsal: 30.10.2016, 22:57 
Offline
Kecálek

Registrován: 27.09.2013, 19:59
Příspěvky: 91
Bydliště: Havirov
Has thanked: 0 time
Been thanked: 11 times
Nekde v nejake prirucce jsem kdysi cetl (snad to bylo Muj pritel Didaktik Gama, kde je rovnez program na vykreslovani pekne kruznice, avsak v Basicu) je to nejak souvisi se zaokrouhlovanim na cela cisla, coz souradnice jsou.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Rychlá kružnice z Bogobasicu
PříspěvekNapsal: 31.10.2016, 23:45 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3642
Bydliště: Bratislava
Has thanked: 371 times
Been thanked: 788 times
Problem bude v tom, ze kruznica v originalnej zx romke sa vykresluje vektorovo. Tym padom tam naozaj nastavaju rozne zaokruhlovacie chyby pri napasovani do bitmapoveho rastra obrazovky. Vsetky tie rychle algoritmy, vratane tohto bogobasicu a aj tej mojej turborutinky pracuju "bitmapovo" (bresenham pre kruznice) a preto generuju pekne a symetricke kruznice.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Rychlá kružnice z Bogobasicu
PříspěvekNapsal: 01.11.2016, 10:21 
Offline
Site Admin
Uživatelský avatar

Registrován: 11.05.2013, 23:48
Příspěvky: 10111
Bydliště: Praha
Has thanked: 1953 times
Been thanked: 1517 times
Přidám ještě info od DEXe, které mi přišlo prakticky ihned po napsání dotazu (snad mu zveřejnění nebude vadit, ale je k tématu):

Optimalizace na velikost - t.j. jak nacpat ANSI kompatibilní Basic včetně příkazů pro grafiku a zvuk do 16 kB ROM.

Proto neexistují oddělené rutiny pro kreslení čáry, oblouku a kružnice, ale jedna obecná rutina s různými způsoby inicializace - pro kresbu oblouku, aproximovaného z krátkých rovných čar (maximálně tuším 252 čar), čára je kreslena jako oblouk s nulovým zakřivením a kružnice jako speciální případ oblouku se zakřivením 2*PI, tedy ve výsledku mnohoúhelník z krátkých rovných čar (snad 252úhelník).
Lze to demonstrovat použitím třetího parametru příkazu DRAW pro vykreslování hvězdicovitých obrazců nebo obecně N-úhelníků (PI*(504/N), kde 504/N musí být liché) - viz http://www.oldgames.sk/mag/bit-31/page/35
/

_________________
Amiga/Amstrad/Atari/Commodore/Mac/Nintendo/PS/PC/Sega/Tandy/ZX


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Rychlá kružnice
PříspěvekNapsal: 22.02.2023, 22:30 
Offline
Profík

Registrován: 06.02.2019, 11:47
Příspěvky: 898
Has thanked: 51 times
Been thanked: 230 times
Napísat Bresenhama len na 7 registroch Z80 je celkom výzva.
Odmenou je rýchlosť kreslenia kružnice.

Takto to beží v emulátore počítača Ondra

P. S. Hoci sa to môže zdať stále pomalé, treba si uvedomiť, že v režime zobrazenia 256 mikroriadkov beží CPU len cca 18% času.


Přílohy:
bresenham.JPG
bresenham.JPG [ 119.5 KiB | Zobrazeno 2471 krát ]
Nahoru
 Profil  
 
 Předmět příspěvku: Re: Rychlá kružnice z Bogobasicu
PříspěvekNapsal: 22.02.2023, 23:39 
Offline
Pan Štábní

Registrován: 12.05.2013, 22:24
Příspěvky: 1508
Bydliště: u Prahy
Has thanked: 44 times
Been thanked: 380 times
No hrome.
V Basicu na Ondrovi nemám příkaz CIRCLE!


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Rychlá kružnice z Bogobasicu
PříspěvekNapsal: 23.02.2023, 03:06 
Offline
Profík
Uživatelský avatar

Registrován: 20.02.2017, 01:17
Příspěvky: 800
Has thanked: 19 times
Been thanked: 48 times
Busy píše:
Problem bude v tom, ze kruznica v originalnej zx romke sa vykresluje vektorovo. Tym padom tam naozaj nastavaju rozne zaokruhlovacie chyby pri napasovani do bitmapoveho rastra obrazovky. Vsetky tie rychle algoritmy, vratane tohto bogobasicu a aj tej mojej turborutinky pracuju "bitmapovo" (bresenham pre kruznice) a preto generuju pekne a symetricke kruznice.


Takze asi jen zvysit nasobne rozliseni Spectrum obrazovky a muzeme vesele vektorizovat?


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Rychlá kružnice z Bogobasicu
PříspěvekNapsal: 23.02.2023, 14:52 
Offline
Pan Štábní

Registrován: 12.05.2013, 22:24
Příspěvky: 1508
Bydliště: u Prahy
Has thanked: 44 times
Been thanked: 380 times
Možná by pak bylo ještě nápadněji vidět, že to není kružnice, ale 252(nebo kolik)úhelník.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Rychlá kružnice z Bogobasicu
PříspěvekNapsal: 23.02.2023, 22:51 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3642
Bydliště: Bratislava
Has thanked: 371 times
Been thanked: 788 times
dex píše:
Možná by pak bylo ještě nápadněji vidět, že to není kružnice, ale 252(nebo kolik)úhelník.
Pocet rovnych usekov, z ktorych sa bude skladat kruznica v ZX basicu, je dany vztahom:
pocet = (PI * SQR polomer + 4) AND -4
pricom ak je tento pocet vecsi ako 252, tak sa obmedzi na 252.
Lenze na to, aby pocet aspon dosiahol tuto hodnotu 252, by polomer musel byt okolo 6640 :)
Pri beznych ZX rozliseniach (176 pix po Y) a pri maximalne moznej velkosti kruznice CIRCLE 128,87.5,88 sa kruznica bude skladat z 32 dielikov.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Rychlá kružnice
PříspěvekNapsal: 05.03.2023, 12:17 
Offline
Profík

Registrován: 06.02.2019, 11:47
Příspěvky: 898
Has thanked: 51 times
Been thanked: 230 times
Martin1 píše:
Napísat Bresenhama len na 7 registroch Z80 je celkom výzva.

HL - relativne suradnice x, y
B - rozhodovacia hodnota
DE - parametre
C - flag
A - pouzity na vypocty
Bresenham 2. radu je najrychlejsi, lebo v jednom cykle je len jedina matematicka operacia - scitanie, na rozdiel od klasickeho Bresenhama, kde je niekolko operacii scitania a nasobenia.
M.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Rychlá kružnice z Bogobasicu
PříspěvekNapsal: 05.03.2023, 12:18 
Offline
Profík

Registrován: 06.02.2019, 11:47
Příspěvky: 898
Has thanked: 51 times
Been thanked: 230 times
A este verzia rekurzivneho vyplnoveho algoritmu pre pocitac Ondra na otestovanie rychlosti.

https://youtu.be/DzdIk1bB_GI

M1


Přílohy:
floodfill.JPG
floodfill.JPG [ 25.7 KiB | Zobrazeno 2133 krát ]
Nahoru
 Profil  
 
 Předmět příspěvku: Re: Rychlá kružnice
PříspěvekNapsal: 06.03.2023, 15:46 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3642
Bydliště: Bratislava
Has thanked: 371 times
Been thanked: 788 times
Martin1 píše:
na rozdiel od klasickeho Bresenhama, kde je niekolko operacii scitania a nasobenia.
Ake nasobenie potrebuje klasicky bresenham ?!?! :shock:


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Rychlá kružnice
PříspěvekNapsal: 07.03.2023, 08:51 
Offline
Profík

Registrován: 06.02.2019, 11:47
Příspěvky: 898
Has thanked: 51 times
Been thanked: 230 times
Busy píše:
Ake nasobenie potrebuje klasicky bresenham ?!?! :shock:

V podstate sú zaužívané (a bežne publikované) tieto dve verzie rovníc v cykle, v obidvoch sú operácie sčítania aj násobenia:

d = d + 4 * x + 6
d = d + 4 * (x - y) + 10

alebo

d = d + 2 * x + 3
d = d + 2 * (x - y) + 5

pričom obidve sú viacmenej totožné (je to len dvojnásobok),
líšia sa len v štartovacej hodnote:

d = 1 - r (správne má byť d = 5 / 4 - r, mal by sa teda použiť štvornásobok a nie dvojnásobok pre celočíselné počítanie)
resp.
d = 3 - 2 * r


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ů: 15 ] 

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 3 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