Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Зображення відрізка з нецілочисловими координатами кінців




Для відрізка з нецілочисловими координатами кінців будемо будувати відповідну 4-зв'язну лінію на растрі.

 

Рис. 6.5. Малювання відрізка з нецілочисловими координатами кінців.

Існує два підходи.

1. Округлити координати кінців до целочисленных і скористатися алгоритмом для цілочислового случаючи. Недолік: може викликати істотні перекручування (особливо у випадку відрізків невеликої довжини).

2. Перейдемо до нашого канонічного випадку, що тепер характеризується тим, що відрізок лежить у першому октанті, але координати в цьому випадку: . Параметризуємо наш відрізок стандартним образом:

де A і B - кінцеві крапки, c > 0 - якийсь масштабний коефіцієнт. Зробимо c досить більшим цілим числом, щоб зменшити помилки округлення. Тоді розглянемо

- збільшення t, при зрушенні на 1 піксель по x;

- збільшення t, при зрушенні на 1 піксель по y.

Будемо порівнювати поточні значення h і v, а потім, залежно від цього, робити крок по x або y і надавати відповідні збільшення h і v. Алгоритм закінчиться, коли h або v перевищить c.

 

Рис. 6.6. Зміна параметрів h і v.

x = 0; y = 0; // Канонічний випадок: початкова крапка// лежить в [0, 1) [0, 1) /* Збільшення t, що відповідають зсувам від початковоїкрапки до границь першого пікселя. */ h = ?h * (1 - x); // ?h0v = ?v * (1 - y); // ?v0 while( (h < c) AND (v < c) ){ plot(x, y); if( h < v ) { // Зрушення по горизонталі x++; h += ?h; } else if( h > v ) { // Зрушення по вертикалі y++; v += ?v; } else { // h = v : Вироджений випадок (див. мал. 6.5) // малюємо довільний із двох можливих пикселей, // наприклад, верхній: plot(x,y+1); x++; y++; h += ?h; v += ?v; }}

Лістинг 6.4. Алгоритм відображення відрізка з нецілочисловими координатами кінців

Зауваження. Наведений вище алгоритм легко узагальнюється на n-мірний випадок.


Поделиться:

Дата добавления: 2015-04-05; просмотров: 79; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.022 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты