User Tag List

Показано с 1 по 10 из 107

Тема: Манделброт в ASCII Art

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #30

    Регистрация
    19.04.2013
    Адрес
    г. Чебоксары
    Сообщений
    609
    Спасибо Благодарностей отдано 
    18
    Спасибо Благодарностей получено 
    175
    Поблагодарили
    135 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Мне тоже стало интересно, и я запустил прогу в эмуляторе, на реальной БК-0010-01 надо придумывать способ, как загрузить прогу через магнитофонный вход, а я об этом вообще не задумывался ещё.
    Код из поста #32 в конфигурации БК-0010-01 на 3МГц выдал такое значение: 191.82660266666667, при этом счётчик таймера перешагнул через 0 и начал отсчёт заново.
    Затем, я заменил все переменные оперирующие целочисленными данными на целочисленные:

    Скрытый текст

    Код:
    100 rem a basic, ascii mandelbrot
    110 rem
    120 rem this implementation copyright (c) 2019, gordon henderson
    130 rem
    140 rem permission to use/abuse anywhere for any purpose granted, but
    150 rem it comes with no warranty whatsoever. good luck!
    160 rem
    165 rem bk conversion by litwr, 2020
    170 c$ = ".,'~=+:;[/<&?oxOX# "
    175 cls
    180 so% = 1%
    190 mi% = len(c$)
    200 mx = 4
    210 ls = -2.0
    220 tp = 1.25
    230 xs = 2.5
    240 ys = -2.5
    250 w% = 38%
    260 h% = 21%
    270 sx = xs / w%
    280 sy = ys / h%
    290 poke &O177712,&O162
    300 for y% = 0% to h%
    310   cy = y% * sy + tp
    320   for x% = 0% to w%
    330     cx = x% * sx + ls
    340     zx = 0
    350     zy = 0
    360     cc% = so%
    370     x2 = zx * zx
    380     y2 = zy * zy
    390     if cc% > mi% then goto 460
    400     if (x2 + y2) > mx then goto 460
    410     t = x2 - y2 + cx
    420     zy = 2 * zx * zy + cy
    430     zx = t
    440     cc% = cc% + 1%
    450     goto 370
    460     ? mid$(c$, cc% - so%, 1%);
    470   next x%
    480   print
    490 next y%
    510 t = peek(&O177710)
    512 if t<0 then t=-t else t=65536-t
    514 print (t+65536)*64/3000*128/1000
    [свернуть]

    стало чуточку быстрее, незначительно, но счётчик таймера всё равно успел перейти через 0, и выдало вот такой результат:
    181.47464533333333
    а затем я поменял плавающие переменные на одинарную точность:

    Скрытый текст

    Код:
    100 rem a basic, ascii mandelbrot
    110 rem
    120 rem this implementation copyright (c) 2019, gordon henderson
    130 rem
    140 rem permission to use/abuse anywhere for any purpose granted, but
    150 rem it comes with no warranty whatsoever. good luck!
    160 rem
    165 rem bk conversion by litwr, 2020
    170 c$ = ".,'~=+:;[/<&?oxOX# "
    175 cls
    180 so% = 1%
    190 mi% = len(c$)
    200 mx! = 4!
    210 ls! = -2.0!
    220 tp! = 1.25!
    230 xs! = 2.5!
    240 ys! = -2.5!
    250 w% = 38%
    260 h% = 21%
    270 sx! = xs! / w%
    280 sy! = ys! / h%
    290 poke &O177712,&O162
    300 for y% = 0% to h%
    310   cy! = y% * sy! + tp!
    320   for x% = 0% to w%
    330     cx! = x% * sx! + ls!
    340     zx! = 0!
    350     zy! = 0!
    360     cc% = so%
    370     x2! = zx! * zx!
    380     y2! = zy! * zy!
    390     if cc% > mi% then goto 460
    400     if (x2! + y2!) > mx! then goto 460
    410     t! = x2! - y2! + cx!
    420     zy! = 2! * zx! * zy! + cy!
    430     zx! = t!
    440     cc% = cc% + 1%
    450     goto 370
    460     ? mid$(c$, cc% - so%, 1%);
    470   next x%
    480   print
    490 next y%
    510 t = peek(&O177710)
    512 if t<0 then t=-t else t=65536-t
    514 print (t+65536)*64/3000*128/1000
    [свернуть]

    Стало прям реально быстро выполняться, программа завершилась раньше, чем счётчик досчитал до нуля, результат получился такой: 305.82101333333333
    Скриншотов не даю, потому что я не понимаю смысла выдаваемых результатов. Лучше - больше или меньше?
    Да и любой сможет повторить это в эмуляторе.
    mandelbrots.zip - архив с бейсиковскими .COD файлами, MAN0.COD - оригинал, MAN1.COD - добавлено целочисленных переменных, MAN2.COD - переменные одинарной точности.

    Ещё, если оригинальную прогу запустить не с начала экрана, результаты немного ухудшаются, из-за затрат на скроллинг экрана.

    Код можно ещё на капелюшечку ускорить, если заменить функцию mid$ на массив символов. Но код становится менее красивым и удобным, а результат - не впечатляет.

    Скрытый текст

    Код:
    100 rem a basic, ascii mandelbrot
    110 rem
    120 rem this implementation copyright (c) 2019, gordon henderson
    130 rem
    140 rem permission to use/abuse anywhere for any purpose granted, but
    150 rem it comes with no warranty whatsoever. good luck!
    160 rem
    165 rem bk conversion by litwr, 2020
    170 rem c$ = ".,'~=+:;[/<&?oxOX# "
    171 data ".", ",", "'", "~", "=", "+", ":", ";", "[", "/", "<", "&", "?", "o", "x", "O", "X", "#", " "
    172 mi% = 19%
    173 dim c$(mi%)
    174 gosub 530
    175 cls
    180 so% = 1%
    200 mx! = 4!
    210 ls! = -2.0!
    220 tp! = 1.25!
    230 xs! = 2.5!
    240 ys! = -2.5!
    250 w% = 38%
    260 h% = 21%
    270 sx! = xs! / w%
    280 sy! = ys! / h%
    290 poke &O177712,&O162
    300 for y% = 0% to h%
    310   cy! = y% * sy! + tp!
    320   for x% = 0% to w%
    330     cx! = x% * sx! + ls!
    340     zx! = 0!
    350     zy! = 0!
    360     cc% = 0%
    370     x2! = zx! * zx!
    380     y2! = zy! * zy!
    390     if cc% >= mi% then goto 465
    400     if (x2! + y2!) > mx! then goto 465
    410     t! = x2! - y2! + cx!
    420     zy! = 2! * zx! * zy! + cy!
    430     zx! = t!
    440     cc% = cc% + 1%
    450     goto 370
    460 rem    ? mid$(c$, cc% - so%, 1%);
    465     ? c$(cc%);
    470   next x%
    480   print
    490 next y%
    510 t = peek(&O177710)
    512 if t<0 then t=-t else t=65536-t
    514 print (t+65536)*64/3000*128/1000
    520 end
    530 restore
    540 for i% = 1% to mi%
    550 read c$(i%)
    560 next i%
    570 return
    [свернуть]
    Последний раз редактировалось gid; 25.09.2023 в 16:01.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Видео о ASCII 2002
    от flydream в разделе Демо
    Ответов: 1
    Последнее: 22.05.2016, 10:26
  2. ASCII/ANSI-art
    от Mat1sha в разделе Творчество
    Ответов: 19
    Последнее: 18.01.2012, 18:11
  3. Bmp->ASCII
    от ALKO в разделе Софт
    Ответов: 8
    Последнее: 23.05.2011, 15:54
  4. ascii logo за 5 минут
    от elf/2 в разделе Утилиты
    Ответов: 0
    Последнее: 21.06.2010, 11:27
  5. ASCII'2008
    от Stingrey в разделе События
    Ответов: 118
    Последнее: 18.11.2008, 16:51

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •