Skip to content

24. Алгоритм плавающего горизонта.

Pandas edited this page May 27, 2017 · 1 revision

Imgur Для хранения максимальных значений y при каждом значении x используется массив, длина которого равна числу различимых точек (разрешению) по оси x в пространстве изображения. Значения, хранящиеся в этом массиве, представляют собой текущие значения "горизонта". Поэтому по мере рисования каждой очередной кривой этот горизонт "всплывает". Фактически этот алгоритм удаления невидимых линий работает каждый раз с одной линией.

Алгоритм работает очень хорошо до тех пор, пока какая-нибудь очередная кривая не окажется ниже самой первой из кривых. Нижняя сторона поверхности делается видимой, если модифицировать этот алгоритм, включив в него нижний горизонт, который опускается вниз по ходу работы алгоритма. Это реализуется при помощи второго массива, длина которого равна числу различимых точек по оси x в пространстве изображения. Этот массив содержит наименьшие значения y для каждого значения x.

Imgur

Проблема с зазубренностью боковых ребер решается включением в массивы верхнего и нижнего горизонтов ординат, соответствующих штриховым линиям. Это можно выполнить эффективно, создав ложные боковые ребра.

Суть алгоритма

  1. обработать левое боковое ребро
  2. для каждой точки очередной кривой проверить условие видимости 3. если видимость изменилась, вычислить точку пересечения
  3. изобразить видимую часть кривой
  4. заполнить массивы горизонтов
  5. обработать правое боковое ребро

Обработка боковых рёбер Левое: если Pk – первая точка первой кривой , то запоминаем её в качестве предыдущей Pk-1, если на не первой – соединяем K и K-1 и запоминаем текущую как K-1. Аналогично правое. В массивы верхнего и нижнего горизонтов заносим ординаты бокового ребра.

Clone this wiki locally