Код 00B: Дробная дуга
 
 
 

Специальный код 00B (11) инициирует отрисовку дуги, которая может начинаться и заканчиваться не на границе октанта. В описании используются 5 байт.

11,смещение_начала,смещение_конца,радиус_ст,радиус,(-)0SC

Смещение_начала и смещение_конца задают величины удаления начальной и конечной точек дуги от границ октанта. Радиус_ст - это старшие 8 бит значения радиуса; они остаются нулевыми, если радиус не превышает 255 единиц. Для того чтобы получить значение радиуса дуги, превышающего 255 единиц, нужно умножить радиус_ст на 256 и добавить к полученному числу радиус. Радиус и завершающий байт задаются точно так же, как и для описанной ранее октантной дуги (код 00A).

Смещениеначала определяется путем вычисления разности (в градусах) между начальной границей октанта (кратной 45 градусам) и началом дуги. Затем эта разность умножается на 256 и делится на 45. Если дуга начинается на границе октанта, смещение_начала равно 0.

Смещение_конца вычисляется аналогичным образом, но при этом используется разность (в градусах) между последней границей октанта, пересеченной дугой, и концом дуги. Если дуга заканчивается на границе октанта, смещение_конца равно 0.

Например, дробная дуга радиусом 3 единицы, проведенная между направлениями 55 и 95 градусов, кодируется так:

11,(56,28,0,3,012)

Пояснение к значениям параметров:

смещение_начала = 56, так как ((55 - 45) * 256 / 45) = 56 
смещение_конца = 28, так как ((95 - 90) * 256 / 45) = 28
радиус_ст = 0 , так как (радиус < 255) 
радиус = 3 
начальный октант = 1, так как дуга начинается в октанте 45 градусов
конечный октант = 2 , так как дуга заканчивается в октанте 90 градусов