6.2.1 Код направления
Каждая линия на изображении остова кодируется ломаной линией. Каждый элемент ломаной линии является фиксированным набором линейных элементов (см. 6.2.4). Линия начинается в точке со смещенной координатой с начальным направлением и следующими характеристиками контрольной точки:
- тип контрольной точки (2 бита: 00 - мнимое окончание гребня, 01 - действительное окончание гребня, 10 - действительная бифуркация гребня, 11 - мнимое продолжение гребня);
- угол направления контрольной точки (число битов на запись определено в блоке "Общий заголовок", диапазон 0°-360° масштабируется согласно числу битов на запись);
- координата X (число битов на запись определено в блоке "Общий заголовок");
- координата Y (число битов на запись определено в блоке "Общий заголовок");
- число следующих элементов направления (8 битов).
Последовательные элементы ломаной линии определяются изменением направления относительно предыдущего элемента или, для первого элемента, относительно направления контрольной точки, масштабируются и округляются до возможных значений кода направления и углового разрешения (см. 6.2.4). Длина каждого элемента является функцией изменения направления (см. 6.2.4):
- изменение направления (число битов направления и угловое разрешение определены в блоке записи "Общий заголовок"; тип данных - целое число со знаком; наименьшее отрицательное число (10...0) не используется для определения изменения направления; например, для числа битов направления, равного 4, и для числа направлений от 0° до 180°, равного 32, диапазон целых чисел от минус 7 до плюс 7 масштабируется в диапазон углов от минус 39,375° до плюс 39,375°);
- или в случае сильного изгиба гребневой линии может возникнуть необходимость сохранять элементы направления при более высоком разрешении. Поэтому предусмотрена возможность переключения между двумя различными уровнями разрешения. При появлении наименьшего отрицательного числа (10...0) в коде, значение разрешения переключается между стандартным и высоким. Кодирование линии всегда будет начинаться со стандартного разрешения. При первом появлении (10...0) в коде значение разрешения изменяется на высокое и используется половина длины шага; при втором появлении происходит обратное переключение к стандартному разрешению и полной длине шага и т.д. (приложение С, таблица С.2);
- изменение направления повторяется до тех пор, пока не будет достигнут конец линии;
- тип контрольной точки конца линии (2 бита: 00 - мнимое окончание гребня, 01 - действительное окончание гребня, 10 - действительная бифуркация гребня, 11 - мнимое продолжение гребня).
Если линия остова заканчивается точкой мнимого окончания гребня (идентификатор типа 00), то относительное расположение контрольной точки на линейном элементе является следующим:
- относительное расположение контрольной точки l/ масштабируется в диапазоне от 0 до 3, то есть берется минимальное значение из двух: или 3, или целое значение от 4l/, и сохраняется как целое 2-битовое число без знака, где l - расстояние между началом последнего элемента линии и контрольной точкой, а - длина шага последнего элемента линии (рисунок 2);
- если линия остова заканчивается действительной контрольной точкой (идентификатор типа 01 или 10) или прерывается точкой мнимого продолжения гребня (идентификатор типа 11), то следуют данные контрольной точки с выравниванием по байтам. Чтобы затраты на выравнивание были небольшими, поступают следующим образом: если ранее сохраненный тип контрольной точки конца линии уже выровнен по стартовому байту, то данные контрольной точки дополняются путем добавления ее направления и расположения. Если тип контрольной точки конца линии не выровнен по стартовому байту, то запись повторяется в начале следующего байта и дополняется направлением и расположением.
В итоге, кодирование продолжается следующим образом:
- если ранее сохраненный тип контрольной точки конца линии не выровнен по стартовому байту, то запись повторяется в начале следующего байта. Любые биты, не использованные по причине выравнивания, заполняются нулями;
- угол направления контрольной точки (в диапазоне от 0° до 360°, масштабируемое в соответствии с числом битов направления в коде направления, определенным в блоке "Общий заголовок");
- координата X (число битов для координат точек определено в блоке "Общий заголовок");
- координата Y (число битов для координат точек определено в блоке "Общий заголовок").
Если конечная контрольная точка имеет тип "мнимое продолжение" (идентификатор типа 11), то описание линии продолжается путем добавления числа следующих элементов направления (8 битов) и элементами направления, как описано ранее.
Любые неиспользованные биты последнего байта каждой закодированной линии заполняются нулями для получения выровненного по байтам начала при кодировании следующей линии.
Рисунок 2 - Относительное расположение контрольной точки на линейном элементе ломаной линии - это отношение l/, где S - длина линейного элемента, проходящего через контрольную точку М; l - расстояние между начальной точкой линейного элемента S и контрольной точкой M; - значение угла
6.2.2 Общие правила кодирования линии остова
Для сохранения минимального размера кодирования, линия должна начинаться с действительной контрольной точки (идентификатор типа 01 или 10), если это возможно.
Не существует ограничений на использование графического режима с высоким разрешением или контрольных точек мнимого продолжения.