Путаница алгоритма DDA......!
Я изучал книгу, объясняющую алгоритм DDA, и застрял в точке. Согласно правилу, точки должны быть округлены, поэтому здесь в этом случае должно быть (4,6) вместо (4,5) это. Проверьте изображение ниже. Я обвел точки, которые я чувствую неправильно в книге, так что я ошибаюсь, или книга опечатка здесь?
1 ответ
Чтобы нарисовать непрерывную линию на дискретном плане (x,y), x, y integer, этот алгоритм, основанный на наклоне линии, делает x или y "носителем" (всегда увеличивающимся на единицу) и другая координата интерполируется. Причиной являются:
- чертеж должен быть как можно ближе к уравнению линии
- не должно быть "дыры" в нарисованной линии
- нет необходимости вычислять больше значений, чем необходимо (например, имея x "перевозчик",
x+0.1
,x+0.2
так далее...)
Документ выглядит как PDF, где вы видите, что непрерывная линия не всегда находится в центре пикселей, которые она пересекает. Благодаря этому алгоритму точка будет иметь непосредственного соседа, либо в x+1
или же y+1
в зависимости от наклона (интерполированная координата может быть вдвое (или более) подряд в одном и том же округленном значении. Например, если y интерполируется, вы можете получить (10,20), (11, 20), (12, 21), имеющие дважды у =20).
Учитывая только четверть [0, 90] градусов, линия начинается с координат (0,0). Если наклон линии ниже 45 градусов, лучше иметь x в качестве "несущей" (с шагом 1) и y интерполировать. пример
+++
+++
+++
здесь x всегда увеличивается на единицу, но y иногда принимает то же значение, что и для предыдущего x (например, для x=0, x=1, x=2 мы имеем тот же y)
Вернуться к округлению
В том же документе говорится, что страница 47
чтобы построить пиксель на экране, нам нужно округлить координаты до ближайшего целого числа
что обычно имеет место при выполнении интерполяции. Лучше взять ближайшее целое число. Это означает, что обычно
- принять целое число + 1, если первый десятичный
>= .5
(например.4.71 => 5
) - принимать только целую часть, если 1-й десятичный
< .5
(например5.42 => 5
)
чтобы:
- координаты целого пикселя ближе к значению уравнения с десятичными знаками
- сумма округленного значения (например, для х), скорее всего, будет близка к сумме расчетного значения из уравнения.
В этом конкретном случае (4, 38/7)
~ = (4, 5.43)
, 5.43
округляется до ближайшего целого числа, т.е. 5
и не 6
,