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.