Студопедия


Авиадвигателестроения Административное право Административное право Беларусии Алгебра Архитектура Безопасность жизнедеятельности Введение в профессию «психолог» Введение в экономику культуры Высшая математика Геология Геоморфология Гидрология и гидрометрии Гидросистемы и гидромашины История Украины Культурология Культурология Логика Маркетинг Машиностроение Медицинская психология Менеджмент Металлы и сварка Методы и средства измерений электрических величин Мировая экономика Начертательная геометрия Основы экономической теории Охрана труда Пожарная тактика Процессы и структуры мышления Профессиональная психология Психология Психология менеджмента Современные фундаментальные и прикладные исследования в приборостроении Социальная психология Социально-философская проблематика Социология Статистика Теоретические основы информатики Теория автоматического регулирования Теория вероятности Транспортное право Туроператор Уголовное право Уголовный процесс Управление современным производством Физика Физические явления Философия Холодильные установки Экология Экономика История экономики Основы экономики Экономика предприятия Экономическая история Экономическая теория Экономический анализ Развитие экономики ЕС Чрезвычайные ситуации ВКонтакте Одноклассники Мой Мир Фейсбук LiveJournal Instagram

Real-integer (промежуточный алгоритм)




Real (без целочисленной арифметики)

Т.к. для прямой линии

Обозначим

k=(float)(x2-x1)/(float)(y2-y1);

for (x=x1; x<=x2;x++) {

y=y1+(int)(k*(x-x1)+0.5);

point(x, y);

}

Операция (int) (k*(x-x1)+0.5) производит математическое округление (а не отсечение дробной части)

Если внимательно посмотреть на изменений y, то можно увидеть, что он или остается тем же, или увеличивается на 1. Выбор должен осуществлятся таким образом, чтобы новая точка сетки (x, y) располагалась по возможности ближе к прямой линии, проходящей через T1 и T2. Это означает, что расстояние по вертикали между новой выбранной точкой и этой линией не должно превышать значение 0.5. Введем d для обозначения этого расстояния и потребуем, чтобы –0.5 <= d <= 0.5. Это неравенство обеспечивает условие для определения необходимости давать приращение переменной y.

k=(float)(x2-x1)/(float)(y2-y1);

d=0;

y=y1;

for (x=x1; x<=x2;x++) {

point(x, y);

d+=k;

if (d>0.5) {y++; d--;}

}

Поскольку d обозначает насколько ниже точной линии лежит вычисленная точка, то значение d увеличивается на значение наклона k, если x увеличивается на 1, и если y остается без изменений. Это условие не выполняется, если значение переменной d превышает значение 0.5. В этот момент нужно увеличить y на 1. Очевидно, что в этот момент отклонение d должно быть уменьшено на 1.





Дата добавления: 2014-02-12; просмотров: 484; Опубликованный материал нарушает авторские права? | Защита персональных данных | ЗАКАЗАТЬ РАБОТУ


Не нашли то, что искали? Воспользуйтесь поиском:

Лучшие изречения: Да какие ж вы математики, если запаролиться нормально не можете??? 8344 - | 7275 - или читать все...

Читайте также:

 

18.206.48.142 © studopedia.ru Не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования. Есть нарушение авторского права? Напишите нам | Обратная связь.


Генерация страницы за: 0.001 сек.