Blog L342n

Cartref

Nôl

Gwybodaeth

Rhaglenni - Mandelbrot

🏴󠁧󠁢󠁥󠁮󠁧󠁿

Roedd hyn yn prosiect gyflym achos roedd Lân wedi diflasu, felly penderfynodd i greu llunydd Mandelbrot mewn ASM. Yn gyntaf, darllenodd Lân y tudalen Wikipedia am y set Mandelbrot i ddechrau i ddeall sut mae'r patrwm yn digwydd, a sut i ysgrifennu cod i ddangos y patrwm. Doedd hyn ddim yn cynorthwyol iawn, felly gwelodd Lân y fideo gan Numberphile am y pwnc. Roedd hyn yn llawer mwy gynorthwyol na wikipedia, a nawr deallodd Lân y patrwn a sut roedd yn creu. Nesaf, ymchwiliodd Lân am y ffwrdd mae rhaglenwyr yn brofi os mae rhif yn sefydlog neu ddim. Ar ôl amser byr, darganfododd Lân fod techneg tebygol yw i brofi fod fc(z) = z^2 + c am rhywbeth fel mil amserau, ac os dydy z ddim yn mynd ar ben swm penodol AC yn mynd i'r terfyn iteriad, mae'r rhif yn sefydlog. Yna, defnyddiodd Lân y cod ar Wikipedia ar y tudalen Plotting algorithms for the Mandelbrot set i weld sut mae hyn yn wneud heb y defnydd o llyfrgelloedd rhifau cymhleth. Defnyddiodd Lân y cod o'r segment o'r enw 'Optimized escape time algorithms', ac ail-ysgrifennodd y cod mewn python, felly deallodd y cod cyn ysgrifennu mewn ASM. Dyma rhai darluniad o'r cod python:

Nawr, roedd yn amser i ysgrifennu'r cod mewn ASM.
Yn gyntaf, roedd yn rhaid i Lân i greu system o ddangos pwyntiau ar y sgrin terfynell. I wneud hyn, defnyddiodd 'ANSI escape sequences' i newid y lliw o'r blaendir a chefndir o'r nod '▄'. Gyda hyn, gallai Lân yn newid y blaendir i newid lliw y picsel gwaelod, ac y cefndir i newid lliw y picsel uchaf. Gyda hyn, gallwch chi gosod picselau fel hyn dros y sgrin i gyd ac yna gosod picsel o hunrhyw lliw ANSI unrhywle ar y sgrin. Ar ôl roedd y system hyn yn gweithio, parhauodd Lân i ysgrifennu cod i ddatganu'r set Mandelbrot. Roedd hyn yn anodd i wneud gydag y FPU, achos o'r ffaith fod y FPU yn tebyg i'r ysgafn. Ond gorffenodd y cod mewn amser byr, ac ar ôl rhai dadfygio, roedd y cod yn dangos y set Mandelbrot.

Fel gallwch chi gweld, mae'r set yn dangos yn wir, ond mae'n mewn lle rhyfedd, ac y lliwau'n rhyfedd hefyd. Fodd bynnag roedd hyn yn hawdd iawn i ddrwsio, achos roedd y byg am liwau'n amlwg iawn, a roedd safle'r set hawdd i ddrwsio hefyd achos dim ond rhaid i chi newid y safle'r top chwith, ac y chwyddo. Ar ôl newid y problemau rhain, roedd yn edrych fel hyn:

Nawr roedd popeth yn cywir. Roedd yn angen i Lân i ysgrifennu cod i symud y llun ac i chwyddo i mewn i'r set mandelbrot. Yn ffodus, mae hyn yn hawdd achos mae'r lefel chwyddo'n wedi diffiniedig gan rhifau ger dechrau'r cod, a roedd bob rhan o fathemateg yn defnyddio'r rhif hwn. Felly i newid i chwyddo, dim ond angen i newid y rhif hwnnw. Ar ôl gorffen hyn, roedd y prosiect yn gorffen. Os dych chi eisiau, gallwch chi lawrlwytho'r rhaglen o GitHub i geisio'r cod amdanoch chi.