Важная информация

User Tag List

Страница 7 из 11 ПерваяПервая ... 34567891011 ПоследняяПоследняя
Показано с 61 по 70 из 106

Тема: Line(x1,y1,x2,y2)

  1. #61
    Veteran
    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,858
    Спасибо Благодарностей отдано 
    131
    Спасибо Благодарностей получено 
    104
    Поблагодарили
    62 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    вместо проверки на ступеньку проверка счётчика
    это равнозначно по быстродействию?

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

  3. #62
    Guru Аватар для Lethargeek
    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,584
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    283
    Спасибо Благодарностей получено 
    236
    Поблагодарили
    185 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    да почти, add+jump против djnz, но это еще без учёта перезагрузок
    Прихожу без разрешения, сею смерть и разрушение...

  4. #63
    Master
    Регистрация
    24.05.2005
    Адрес
    г. Запорожье, Украина
    Сообщений
    992
    Спасибо Благодарностей отдано 
    571
    Спасибо Благодарностей получено 
    365
    Поблагодарили
    239 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Небольшое чтиво в тему - описано как избавиться от ветвления в алгоритме Брезенхейма - ну и просто интересная книжка.
    Вложения Вложения

  5. #64
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    13,662
    Спасибо Благодарностей отдано 
    1,254
    Спасибо Благодарностей получено 
    1,880
    Поблагодарили
    711 сообщений
    Mentioned
    67 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от shurik-ua Посмотреть сообщение
    Небольшое чтиво в тему - описано как избавиться от ветвления в алгоритме Брезенхейма
    Для Спектрума это в чистом виде не очень подходит ввиду большой разрядности констант для сохранения формы линии идентичной стандартной.
    А в упрощенном виде это и так (я надеюсь) все, кому не лень пробовали (во всяком случае я), хотя излом линии получался нестандартным, с некоторыми погрешностями.

  6. #65
    Master
    Регистрация
    24.05.2005
    Адрес
    г. Запорожье, Украина
    Сообщений
    992
    Спасибо Благодарностей отдано 
    571
    Спасибо Благодарностей получено 
    365
    Поблагодарили
    239 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    тут в начале темы спорили как же лучше тестировать скорость рисования линии - как вариант можно сделать как здесь:


    Даже исходники есть :
    Вложения Вложения

  7. #66
    Veteran Аватар для Destr
    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,804
    Спасибо Благодарностей отдано 
    253
    Спасибо Благодарностей получено 
    114
    Поблагодарили
    88 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Други, подмогните!
    Не могу сообразить как рассчитать шаг линии на один пиксел за раз.
    Т.е. не накапливая err.
    Делаю так (для 0 октанта):
    dx = x - xcnt
    dy = y - ycnt
    err = dx / dy - dy
    x = x - 1
    If err < 0
    y = y - 1
    EndIf

    Но работает как-то криво:
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	ln.PNG 
Просмотров:	109 
Размер:	7.7 Кб 
ID:	53484  

  8. #67
    Master
    Регистрация
    24.05.2005
    Адрес
    г. Запорожье, Украина
    Сообщений
    992
    Спасибо Благодарностей отдано 
    571
    Спасибо Благодарностей получено 
    365
    Поблагодарили
    239 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Код:
    function line(x0, x1, y0, y1)
         int deltax := abs(x1 - x0)
         int deltay := abs(y1 - y0)
         real error := 0
         real deltaerr := deltay / deltax
         int y := y0
         for x from x0 to x1
             plot(x,y)
             error := error + deltaerr
             if error >= 0.5
                 y := y - 1
                 error := error - 1.0

  9. #68
    Veteran Аватар для Destr
    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,804
    Спасибо Благодарностей отдано 
    253
    Спасибо Благодарностей получено 
    114
    Поблагодарили
    88 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от shurik-ua Посмотреть сообщение
    function line(x0, x1, y0, y1)
    Это из википедии.
    Пробовал.
    Тоже лажа получается (ведь error сохрнанять не получится).

  10. #69
    Master
    Регистрация
    24.05.2005
    Адрес
    г. Запорожье, Украина
    Сообщений
    992
    Спасибо Благодарностей отдано 
    571
    Спасибо Благодарностей получено 
    365
    Поблагодарили
    239 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    вот по пунктам как я понимаю:
    1. вычисляем dХ и dY
    2. определяем которая из них (дельт) больше - например dy
    3. переменная err - на входе цикла равна 0
    4. делаем цикл на столько итераций сколько в бОльшей дельте for n=0 to (y-1)
    5. ставим точку и увеличиваем ту координату, дельта которой больше - y=y+1
    6. err = err + dx - прибавляем меньшую дельту к переменной
    7. if err > dy then err = err-dy:x=x+1: end if;

  11. #70
    Veteran Аватар для Destr
    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,804
    Спасибо Благодарностей отдано 
    253
    Спасибо Благодарностей получено 
    114
    Поблагодарили
    88 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от shurik-ua Посмотреть сообщение
    вот по пунктам как я понимаю:
    Да не пойдёт.
    В общем дело так: Есть спрайт (координаты x1,y1 в пикселах).
    Есть точка назначения (x2, y2 тоже в пикселах).
    Нужна подпрограмма которая сдвигает координаты спрайта (x1,y1) на один шаг (пиксель) в желаемом направлении (x2,y2).
    Хранить err не вариант (ведь целевые координаты могут менятся, а спрайт всё равно должен двигатся к точке назначения).
    Процедура каждый раз должна вычислять что и как прибавлять.
    Т.е. сохранять err никак не полезно (ибо если коорд. изменились то прошлое значение неактуально).
    Конечно можно каждый раз рассчитывать всю линию полностью, но сдвигать координаты только один раз, но мне это кажется жутким ламерством и заставить себя так сделать не могу.

Страница 7 из 11 ПерваяПервая ... 34567891011 ПоследняяПоследняя

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

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

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

Ваши права

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