Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Алгоритмы и теория программирования


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Роман Селиверстов
Статус: Советник
Рейтинг: 4401
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2430
∙ повысить рейтинг »
Абаянцев Юрий Леонидович aka Ayl
Статус: Профессионал
Рейтинг: 2109
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Алгоритмы и теория программирования

Номер выпуска:156
Дата выхода:20.03.2012, 17:30
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:183 / 85
Вопросов / ответов:1 / 2

Консультация # 185609: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: существует алгоритм разложение в растр отрезка по методу цифрового дифференциального анализатора. Пример данного алгоритма я привожу из книги Д. Роджерса "Алгоритмические основы машинной графики"

Консультация # 185609:

Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: существует алгоритм разложение в растр отрезка по методу цифрового дифференциального анализатора. Пример данного алгоритма я привожу из книги Д. Роджерса "Алгоритмические основы машинной графики"

В данном алгоритме есть строки: x = x1 + 0.5*Sign(deltaX) и
y = y1 + 0.5*Sign(deltaY). Объясните пожалуйста, почему берётся коэффициент 0.5, а не, скажем, 0.3 или 0.7 ?
Спасибо.

Дата отправки: 17.03.2012, 16:49
Вопрос задал: Александр (Посетитель)
Всего ответов: 2
Страница онлайн-консультации »


Консультирует Vest (Студент):

Добрый день Александр,

Поводив пальцем по этой ссылке, я смел предположить, что этот коэффициент просто смещает точку, которая будет заливать пиксель в сетке представляющей экран. Посмотрите на последней картинке, там видно, что прямая подходит под углом около 30 градусов, причем первая точка - имеет координаты (0;0). Первый же вопрос, какой пиксель надо закрашивать, ведь эта точка граничит с четырьмя пикселями. Искусственно мы её смещаем на половину влево и вниз и попадаем в квадрат (-0.5;-0.5) или точнее его центр. А далее, мы начинаем получать другие координаты пикселей, которые надо закрашивать, если следовать уравнению прямой, заданной вначале.

обратите также внимание, что точки, которые получаются округлением, они расположены чуть ниже искомой прямой. Допустим, если бы мы не смещали координаты пикселей, мы бы наверняка потеряли первую точку около нуля. Или в лучшем бы случае, получили точно такой же отрезок, но смещённый на один пиксель вверх и вправо.

Я так думаю, что особой беды не будет, если добавлять 0.3 или 0.7. Внешне разница не должна быть велика. Просто точка с координатами (0.5;0.5) бОльше соответствует центру первого пикселя от которого надо "плясать" при построении растра отрезка.

Консультировал: Vest (Студент)
Дата отправки: 17.03.2012, 17:56
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Evgenijm (10-й класс):

Здравствуйте, Александр!

Картинка не грузится, но по ссылке из ответа эксперта Vest есть описание данного алгоритма. Цель этих строк - защита от погрешностей. Если мы храним вещественные "целые" числа, которые не кратны 2, то в реальности они могут быть дикими двоичными дробями. А после операций над этими числами мы почти наверняка получим что-то вроде 4,999999999 вместо 5,0. Если отбросить дробную часть у этого числа, то точка сместится на 1 пиксель. Нам нужна только целая часть числа, но она должна быть точной. Сдвинув координату на полпикселя, мы оставляем достаточный зазор, чтобы погрешности в любую сторону не изменили результат. И этот зазор максимален из всех возможных. Вот его и ставят.

Данный алгоритм обычно не используется. Есть его целочисленный аналог. Там ведущая координата каждый шаг увеличивается на 1, а для ведомой есть счетчик, который увеличивается с каждым шагом на определенное число и после переполнения увеличивает значение ве домой координаты на 1. В зависимости от архитектуры процессора, такой подход может быть даже в десятки раз быстрее.

Консультировал: Evgenijm (10-й класс)
Дата отправки: 18.03.2012, 00:27
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!



В избранное