User Tag List

Страница 8 из 8 ПерваяПервая ... 45678
Показано с 71 по 80 из 80

Тема: Демонстрационные программы для Специалиста

Комбинированный просмотр

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

    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,926
    Спасибо Благодарностей отдано 
    105
    Спасибо Благодарностей получено 
    291
    Поблагодарили
    217 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    если бы не локальные утолщения
    Нет ничего невозможного

    Вот новый вариант, постарался сделать максимально похожим на алгоритм окружности, чтобы было видно саму идею:
    Код:
        const circle = function(r) {
          let t=r/2,x=r,y=0;
          while(x>=0) {
            pset(x,y);
            if(t>=0) { ++y; t-=y; }
            if(t<0) { --x; t+=x; }
          }
        }
    
        const ellibase = function(r,r1,swap) {
          let t=r/2,x=r,y=0,t1=t,y1=0,py=0;
          while(x>=0) {
            py=y1; if(swap) pset(y1,x); else pset(x,y1);
            if(t>=0) { ++y; t-=y; if((t1-=r1)<0) { t1+=r; ++y1; } }
            if(t<0) { --x; t+=x; if(py==y1 && t>y && t1<r1) { ++y; t-=y; t1+=r-r1; ++y1; } }
          }
        }
    
        const ellipse = function(rx,ry) {
          if(rx>ry)
            ellibase(rx,ry,0);
          else
            ellibase(ry,rx,1);
        }
    Код выделенным шрифтом убирает утолщения.

    Ссылка для тестирования та-же.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    5,215
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    706
    Спасибо Благодарностей получено 
    1,648
    Поблагодарили
    573 сообщений
    Mentioned
    50 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Воспользовался процедурой рисования линии, которую предложил blackmirror. Стало всё ГОРАЗДО быстрее, даже удивительно!



    ИИ глядя на эту процедуру, тоже в восторг пришёл, назвав её предельно оптимизированной.

    Помимо замены процедуры рисования линии, я расширил холст с 256*192 до 256*256. Автор демки уверяет, что никакого родства со Спектрумом нет, а источников вдохновения послужила демка с IBM PC arty4, написанная на Borland Pascal. Почему был выбран именно такой размер окна он уже не помнит. И вот я подумал, что может быть в прямоугольном окне интереснее фигуры получаются?

    Также приложу сюда сразу переделанную под i8080 и SJAsmPlus процедуру рисования линии. Там вроде бы и команд Z80 было раз два и обчёлся, но у меня почему-то слишком много времени заняло, чтобы заставить всё это работать корректно на Специалисте.

    Код:
        align 8
    PixMask db    128, 64, 32, 16, 8, 4, 2, 1
    
    SetPix    macro
        xor    (hl)
        ld    (hl), a
        endm
    
    LineTo:                    ; (hl - x1y1)
        ld    de, 0x0000
        ld    (LineTo + 1), hl
    Line:                    ; (hl - x1y1, de - x2y2)
        ld    a, d
        sub    h
        jp    nc, LineGm
        cpl
        inc    a
        ex    de, hl            ; swap p1, p2
    LineGm: 
        ld    d, a            ; dx
        ld    bc, PixMask    
        ld    a, 7
        and    h
        add    c
        ld    c, a
        ld    a, h
        or    a
        rra 
        or    a
        rra
        or    a
        rra
        add    0x90 + 8        ; Старший байт адреса начала экрана Специалиста
        ld    h, a
        ld    a, (bc)
        ld    b, a
    LineDy: 
        ld    a, e
        sub    l
        jp    nc, LineXi
        cpl 
        inc    a
    LineXd: 
        ld    e, a            ; dy
        sub    d
        jp    nc, LineYd
        cpl
        inc    a
        ld    (LineXdd + 1), a    ; dx-dy
        ld    a, 0x2D            ; dec l
        ld    (LineXmm), a
        jp    LineXi1
    
    LineYd: 
        ld    (LineYdd + 1), a    ; dy-dx
        ld    a, 0x2D            ; dec l
        ld    (LineYy), a
        ld    (LineYyy), a
        jp    LineYi1
    
    LineXi: 
        ld    e, a
        sub    d
        jp    nc, LineYi
        cpl
        inc    a
        ld    (LineXdd + 1), a    ; dx-dy
        ld    a, 0x2C            ; inc l
        ld    (LineXmm), a
    LineXi1:
        ld    c, d            ;cnt
        inc    c
        ld    a, d
        or    a
        rra
        ld    d, a
        ld    a, b
    LineXp:
        SetPix
        dec    c
        ret    z
        ld    a, d
        sub    e
        ld    d, a
        jp    nc, LineXpp
    LineXmm:
        dec    l
        ld    a, b
        rrca
        ld    b, a
        jp    nc, LineXm
        inc    h
    LineXm:
        SetPix
        dec    c
        ret    z
        ld    a, d
    LineXdd:
        add    0
        ld    d, a
        jp    nc, LineXmm
    LineXpp:
        ld    a, b
        rrca
        ld    b, a
        jp    nc, LineXp
        inc    h
        jp    LineXp
    
    LineYi: 
        ld    (LineYdd + 1), a    ; dy-dx
        ld    a, 0x2C            ; inc l
        ld    (LineYy), a
        ld    (LineYyy), a
    LineYi1:
        ld    c, e            ; cnt
        inc    c
        ld    a, e
        or    a
        rra
        ld    e, a
        ld    a, b
    LineYp:
        SetPix
        dec    c
        ret    z
    LineYy: 
        inc    l            ; ++y
        ld    a, e
        sub    d
        ld    e, a
        ld    a, b
        jp    nc, LineYp
        rrca
        ld    b, a
        jp    nc, LineYm
        inc    h            ; ++x
    LineYm: 
        SetPix
        dec    c
        ret    z
    LineYyy:
        inc    l            ; ++y
        ld    a, e
    LineYdd:
        add    0
        ld    e, a
        ld    a, b
        jp    c, LineYp
        rrca 
        ld    b, a
        jp    nc, LineYm
        inc    h
        jp    LineYm
    Вложения Вложения
    С уважением, Станислав.

  4. #3

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,391
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Попробуй (64,16) или (16,64). Для этих случаев картинка чуть изменилась, но утолщения на концах остались.

  5. #4

    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,926
    Спасибо Благодарностей отдано 
    105
    Спасибо Благодарностей получено 
    291
    Поблагодарили
    217 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Нет, в этом алгоритме (со "сплющиванием" окружности) похоже совсем идеальный эллипс не нарисовать.

    Идеальный вот:
    Код:
        const ellipse = function(rx,ry) {
          let ky=rx*rx/ry;
          let t=rx*rx/6,x=rx,y=0,dx=rx*ry,dy=0;
          while(x>=0) {
            pset(x,y);
            if(t>=0) { ++y; dy+=ky; t-=dy; }
            if(t<0) { --x; dx-=ry; t+=dx; }
          }
        }
    - - - Добавлено - - -

    В целых числах (но тут третья степень радиусов):
    Код:
        const ellipse = function(rx,ry) {
          let kx=ry*ry,ky=rx*rx;
          let t=ry*ky/6,x=rx,y=0,dx=rx*kx,dy=0;
          while(x>=0) {
            pset(x,y);
            if(t>=0) { ++y; dy+=ky; t-=dy; }
            if(t<0) { --x; dx-=kx; t+=dx; }
          }
        }
    Последний раз редактировалось b2m; 17.09.2025 в 14:32.

  6. #5

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,391
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вероятно я ошибся в реализации, у меня на картинке занижает радиус по y.
    Последний раз редактировалось ivagor; 17.09.2025 в 16:39. Причина: убрал про дробную часть t, дело не в ней

  7. #6

    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,926
    Спасибо Благодарностей отдано 
    105
    Спасибо Благодарностей получено 
    291
    Поблагодарили
    217 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    Или дело в потере дробной части
    В js нет потери дробной части, но когда радиус по оси Х маленький, то тоже занижает. Странно, видимо, особенность алгоритма.

    А вот с утолщениями нормально.

    - - - Добавлено - - -

    Могу только предложить идею с перестановкой координат из второго варианта (со сплющиванием).

    Этот пользователь поблагодарил b2m за это полезное сообщение:

    ivagor(17.09.2025)

  8. #7

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,391
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    Могу только предложить идею с перестановкой координат из второго варианта (со сплющиванием).
    Это помогло.
    Единственный недостаток по сравнению со средней точкой - "Jeskoвые" ромбы при самых маленьких радиусах, зато при больших красиво. Этот вариант получился средний по красоте, размеру и скорости между этой твоей модификацией Jesko и средней точкой. Теперь есть из чего выбрать.

  9. #8

    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    5,215
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    706
    Спасибо Благодарностей получено 
    1,648
    Поблагодарили
    573 сообщений
    Mentioned
    50 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Vertical Vass Scrolling

    Подробности здесь.



    Прямая ссылка на скачивание RKS.
    Последний раз редактировалось CityAceE; 17.09.2025 в 21:56.
    С уважением, Станислав.

  10. #9

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,391
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Осторожно, под спойлером есть негатив

    На мой субъективный взгляд в такой беспощадной рванине мало смысла, это тяжело смотреть и еще тяжелее получать какое-то удовольствие. Есть 2 основных варианта борьбы с разрывами:
    1. Выравнивание кода до кратности кадру + ручная подстройка, как здесь (кстати, теперь это работает и в emu и в современных версиях emu80). Таким макаром можно выводить (очень простую, состоящую из повторяющихся в столбце блоков 8x6) динамическую картинку разрешением примерно до 2/3 спековского экрана (256x128 или близко). Пример того, что можно реализовать - первый эффект из векторовской демы From Sunset To Dawn. Основной ограничивающий фактор - сложно поддерживать постоянный период выполнения кода по мере его усложнения.
    При наличии таймера очевидно все резко упрощается, один раз подстроились в начале, потом пользуемся без особых ограничений.
    Забыл сразу написать про второй ограничивающий фактор - сейчас существуют клоны специалиста с отличающимися параметрами развертки. Тут все зависит от желания и возможностей по отладке, или можно поддержать один самый распространенный вариант или те варианты, к которым есть доступ.
    2. Не полное устранение, а уменьшение заметности разрывов. 1) Построчный (не постолбцовый) вывод из теневого буфера, 2) бОльшую часть картинки должны занимать однородные (сплошные черные или белые) участки. Пример реализации такого подхода - jet set. Ну и тут неприятная зависимость - чем меньше FPS, тем реже разрывы.
    [свернуть]
    Последний раз редактировалось ivagor; 18.09.2025 в 07:31. Причина: дополнил первый пункт про разные варианты развертки

    Этот пользователь поблагодарил ivagor за это полезное сообщение:

    CityAceE(18.09.2025)

  11. #10

    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,926
    Спасибо Благодарностей отдано 
    105
    Спасибо Благодарностей получено 
    291
    Поблагодарили
    217 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А что, если таким образом выводить текст? Понятно, что символы не 6х8, а 8х10, но всё же. Я думаю ускорение будет заметно. Какой-нибудь скроллер забабахать. Шрифт, правда, в два раза распухнет...

Страница 8 из 8 ПерваяПервая ... 45678

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

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

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

Похожие темы

  1. Конвертор ZX-картинок для Специалиста
    от CityAceE в разделе Специалист
    Ответов: 19
    Последнее: 08.05.2025, 18:04
  2. Ответов: 153
    Последнее: 16.12.2021, 19:07
  3. Элита для Специалиста
    от jerri в разделе Специалист
    Ответов: 77
    Последнее: 20.11.2021, 20:22
  4. Ответов: 70
    Последнее: 22.01.2018, 21:06
  5. OriNET для Специалиста ?
    от SYR-ALEX в разделе Специалист
    Ответов: 22
    Последнее: 21.07.2017, 07:40

Ваши права

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