Вообще, любая прямая в растре будет регулярной 1) на уровне точек, которые складываются в прогоны и 2) на уровне прогонов, которые точно так же регулярно складываются в, скажем так, части линии.
О прогонах уже говорили. А вот на эти части можно посмотреть так. Пусть требуется построить в растре некоторую горизонтально ориентированную прямую с [DX/DY] = 1. Теперь представим себе в том же растре соответствующую диагональ (с соотношением DX/DY точно равным единице, т.е. DX = DY). Так вот искомую прямую можно получить заменив в диагонали часть точек на горизонтальные прогоны длиной в две точки (помним, что прогоны в такой линии у нас могут быть только длиной в одну или две точки). Таким образом каждый такой прогон в две точки будет увеличивать DX диагонали на одну точку. То есть для искомой прямой нужно добавить (DX-DY) таких прогонов. При этом, чтобы прямая была похожа на прямую, все эти длиные прогоны должны быть расположены, насколько позволяет шаг растра, на одинаковом расстоянии. Сбалансированная линия, в терминах таких частей линий, означает одинаковое, опять же, насколько это позволяет растр, отстояние длинных прогонов от концов линии. Так вот последовательность коротких прогонов в купе с одним длинным дает одну часть линии.
Арифметика получается такая. Всего в горизонтально ориентированной линии с геометрией R = [DX/DY] = 1 будет N = (DX - DY) частей. Размер части по вертикали будет равен PY = (DY / N). Если отношение PY нецелое, тогда линия будет составлена из частей двух размеров, а именно [PY] и [PY] + 1. Большая часть (размером [PY] + 1) -- это малая часть плюс один короткий прогон. Размер части по горизонтали в любом случае будет равен PX = PY + 1.
Даже если так, что специального может сделать процедура рисования прямой для линий из десяти точек?





Ответить с цитированием