Расположение пикселей — это целочисленные значения. Уравнения идеальной линии представлены действительными числами. Таким образом, алгоритмы рисования линий преобразуют действительные числа линейного уравнения в целые значения. Сложный и медленный способ нарисовать линию — оценить уравнение линии для каждого значения x в вашем массиве пикселей. Цифровые дифференциальные анализаторы оптимизируют этот процесс несколькими способами.
Во-первых, DDA используют тот факт, что известен хотя бы один пиксель — начало строки. От этого пикселя DDA вычисляют следующий пиксель в строке, пока не достигнут конечной точки линии.
Во-вторых, в DDA используется тот факт, что по осям x или y следующий пиксель в строке всегда является следующим целочисленным значением ближе к концу строки. DDA выясняет, какая ось, оценивая наклон. Положительные наклоны от 0 до 1 увеличивают значение x на 1. Положительные наклоны больше единицы увеличивают значение y на 1. Отрицательные наклоны от -1 до 0 увеличивают значение x на -1, а отрицательные наклоны меньше -1 увеличит значение y на -1.
В-третьих, DDA используют тот факт, что если изменение в одном направлении равно 1, изменение в другом направлении является функцией наклона. Теперь это становится намного сложнее объяснить в общих чертах. Поэтому я просто буду рассматривать положительные наклоны между 0 и 1. В этом случае, чтобы найти следующий пиксель для построения, x увеличивается на 1, и вычисляется изменение y. Один из способов вычислить изменение y — просто добавить наклон к предыдущему y и округлить до целого значения. Это не работает, если вы не поддерживаете значение y как действительное число. Наклоны больше единицы могут просто увеличивать y на 1 и вычислять изменение x.
В-четвертых, некоторые DDA дополнительно оптимизируют алгоритм, избегая вычислений с плавающей запятой. Например, линейный алгоритм Брезенхэма представляет собой DDA, оптимизированный для использования целочисленной арифметики.
В этом примере линия от (2, 2) до (8, 10) имеет наклон 8/6, что больше 1. Первый пиксель находится в точке (2, 2). Следующий пиксель вычисляется путем увеличения значения y на 1 и добавления изменения x (обратный наклон dx/dy = 6/8 = 0,75) к x. Значение x будет равно 2,75, которое округляется до 3, и (3, 3) отображается на графике. Третий пиксель снова увеличит y, а затем добавит изменение x к x (2,75 + 0,75 = 3,5). Округление нанесет третий пиксель на (4, 4). Затем четвертый пиксель будет отображать (5, 4), поскольку y будет увеличен на 1, а x будет увеличен на 0,75 и будет равен 4,25.
Из этого примера вы видите проблему с вашим кодом?
person
Mr. Berna
schedule
11.11.2009