На правах рекламы:
ISSN 0236-235X (P)
ISSN 2311-2735 (E)

Авторитетность издания

ВАК - К1
RSCI, ядро РИНЦ

Добавить в закладки

Следующий номер на сайте

2
Ожидается:
16 Июня 2024

Программный генератор символов на основе трехмерного массива

Статья опубликована в выпуске журнала № 3 за 2000 год.
Аннотация:
Abstract:
Автор: Джагаров Ю.А. () -
Ключевое слово:
Ключевое слово:
Количество просмотров: 11197
Версия для печати
Выпуск в формате PDF (1.53Мб)

Размер шрифта:       Шрифт:

Для оцифровки горизонтальных осей графика многозначными числами удобно вертикальное расположение цифровой строки. Однако штатные графические средства языковых сред типа QuckBASIC не позволяют изменять как ориентацию цифровой строки, так и размеры цифр, что создает трудности при чтении машинного графика. Использование для этой цели операторов типа DRAW с командами поворота и масштабирования значительно усложняют структуру модуля поворота, делая ее сравнимой по сложности с основным блоком программы построения графика. Кроме этого, размер каждого символа жестко детерминирован и требует для своей реализации отдельной программной позиции.

Ниже описан программный генератор символов, позволяющий выводить цифровую строку как в горизонтальной, так и в вертикальной ориентации и устанавливать произвольный размер знаков. Символы синтезируются на основе прямоугольной матрицы пикселей из m строк и m-1 столбца при m ≥ 5. При m < 5 указанная матрица не обеспечивает различимость всех символов. Для реализации возможности изменения размера символа формируется опорный трехмерный целочисленный массив S%(Z,m,m-1). Интерпретируя такой массив, как совокупность, из Z двухмерных массивов m × (m–1) с параметром Z связывается конкретный знак, а с величиной m его размер. Элементам опорных массивов m × (m–1) одноименным с точками матрицы пикселей, участвующим в образовании контура знака, присваивается значение единицы, а остальным элементам – нуль. Для синтеза арабских цифр, знака минус и десятичной запятой значение параметра Z изменяется от 0 до 11.

Использование трехмерного массива значительно упрощает адресацию к составляющим его двухмерным массивам, позволяя использовать для этой цели общий принцип обращения к элементу массива. Например, массив S%(Z,m,m-1) при m ≤ 7 может быть выведен на экран полностью следующим образом:

CLS : K = 0

FOR R = 0 TO 8 STEP 4

b = R + 3

FOR I = 1 TO m

FOR Z = R TO b

FOR J = 1 TO m - 1

PRINT S%(Z, I, J);

NEXT J

IF Z = b THEN PRINT ELSE PRINT " ";

NEXT Z, I: LOCATE R + m + 2 + 2 * K, 1

K = K + 2

NEXT R

Программный генератор символов состоит из трех блоков: блока формирования опорного массива (фигура 1), блока синтеза контура знака и блока подпрограмм (фигура 2), обслуживающего оба первых блока. Описываемый генератор предназначен для использования в качестве подпрограммы в программе построения графического объекта, рассматриваемой в качестве основной. В связи с этим операторы строк 1 и 2 на фигуре 1 и фигуре 2 показаны с иллюстративной целью, поскольку задаваемые ими операции, как правило, включаются в основной блок. Блоки фигур 1 и 2 могут располагаться как в составе одной подпрограммы, так и отдельно. Блок формирования опорного массива (фигура 1) выполняется один раз при изменении значения переменной m, после

‘БЛОК ФОРМИРОВАНИЯ ОПОРНОГО МАССИВА

1           DEFINT A-Z

2     INPUT "Размер символа m"; m: IF m < 5 THEN m = 5

Sz:  REDIM S%(11, m, m - 1)

St = FIX(m / 2): Sr = m - St    '.....Столбец, строка

FOR Z = 0 TO 11: SELECT CASE Z

CASE 0  '.. Цифра 0

GOSUB e: GOSUB h: b1 = m - 1: GOSUB b

                                                       CASE 1  '.. Цифра 1

k1 = 1: k2 = m: b1 = m - 1: GOSUB b:

c1 = Sr: GOSUB C

CASE 2  '.. Цифра 2

GOSUB e: a1 = m: GOSUB a: c1 = m - 1: GOSUB C

CASE 3  '.. Цифра 3

GOSUB e: a1 = Sr: R = St: GOSUB a

c1 = Sr: GOSUB C: GOSUB f

CASE 4  '.. Цифра 4

k1 = 1: k2 = m: b1 = m - 1: GOSUB b

k2 = Sr: b1 = 1: GOSUB b

R = 1: a1 = Sr: GOSUB a

CASE 5   '.. Цифра  5

GOSUB e: a1 = Sr: GOSUB a: GOSUB p: GOSUB f

CASE 6  '.. Цифра  6

GOSUB d: k1 = 1: k2 = m: b1 = 1: GOSUB b

k1 = Sr: b1 = m - 1: GOSUB b

CASE 7   '.. Цифра  7

R = 1: a1 = 1: GOSUB a: c1 = m - 1

GOSUB C: S%(Z, m, 1) = 1

CASE 8  '.. Цифра 8

R = 1: a1 = 1: GOSUB a: a1 = Sr: GOSUB a

a1 = m: GOSUB a

k1 = 1: k2 = m: b1 = 1: GOSUB b

b1 = m - 1: GOSUB b

CASE 9    '.. Цифра  9

R = 1: a1 = 1: GOSUB a: a1 = Sr: GOSUB a

a1 = m: GOSUB a

k1 = 1: k2 = Sr: b1 = 1: GOSUB b

k2 = m: b1 = m - 1: GOSUB b

CASE 10     '...знак.минус

                                                R = 1: a1 = Sr: GOSUB a

CASE 11     '....знак точка

K = CINT((m + 1.4) / 3): S%(Z, m - 1, K) = 1

S%(Z, m - 1, K + 1) = 1: S%(Z, m, K + 1) = 1

END SELECT: NEXT Z

Фигура 1

БЛОК СИНТЕЗА КОНТУРА ЗНАКА

1 SCREEN 1: COLOR 11, О

2 INPUT "Число,X,Y.Ориентация"; С#, X, У, Dr

Gen: N$ = STR$(C#): N$ = LTRIM$(N$): К = LEN(N$)

FOR I1=1 TO К

T$=MID$(N$,I1,1)

IF T$ = "-" THEN Z = 10: GOTO ab

IF T$ = "." THEN Z = 11: GOTO ab

Z=VAL(T$)

ab: SELECT CASE Dr

CASE 0

3 IF Z=l THEN X=X+m-l ELSE X=X+m:GOSUB G

CASE 1

4 IF Z=l THEN Y=Y+m-l ELSE Y=Y+m::GOSUB V

END SELECT

NEXT I1

END 'RETURN

'........БЛОК ПОДПРОГРАММ

G: FOR I=l TO m

FOR J=l TO m-l

IF S%(Z,I,J)=1 THEN PSET(X+J-1,Y+I-1)

NEXT J, I: RETURN

V:FOR J=l TO m-l

FOR I=m TO 1 STEP-1

IF S%(Z,I,J)=1 THEN PSET (X+m-I, Y+J-1)

NEXT I,J: RETURN

a: FOR J=R TO m-1 '....Горизонтальные элементы знака

S%(Z,a1,J)=l:NEXT J

RETURN

b: FOR I = kl TO k2   '.....Вертикальные элементы знака

S%(Z,I,b1)=1: NEXT I

RETURN

С: FOR I=2 TO cl '...Диагональные элементы знака

S%(Z,I,m-I)=l:NEXT I

RETURN

d:R=l: al=Sr: GOSUB a

e:R=l: al= l: GOSUB a

al = m: GOSUB a

RETURN

f: k1 = Sr: k2 = m: b1 =m-1: GOSUB b

RETURN

p: kl = 1: k2 = Sr: bl = 1: GOSUB b

RETURN

h: kl = 1:k2 =m: bl = 1: GOSUB b

RETURN

Фигура 2

чего синтез цифровой строки выполняется только блоком фигуры 2. Загрузка опорного массива выполняется с помощью подпрограмм a, b и с (фигура 2) блока подпрограмм, формирующих соответственно горизонтальные, вертикальные и диагональные элементы контура символа (при горизонтальном чтении цифровой строки). Здесь индекс I управляет строками, а J столбцами опорных массивов, входящих в состав массива S%. Положение элементов контура, связанное с размерами знака, рассчитывается с помощью параметров St=FIX(m/2) и Sr=m-St (фигура 1), определяющих соответственно столбец и строку опорного массива, участвующих в синтезе данного элемента. Формирование опорного массива выполняется в цикле по параметру Z, значение которого соответствует синтезируемой цифре. Значения Z=10 и Z=11 соответствуют знакам минус и десятичная запятая соответственно. Положение последней в строке зависит от используемого размера символа (число m) и рассчитывается с помощью параметра K=CINT(m+1.4)/3).

Подпись:  
Фигура 3
Входными параметрами для программного генератора символов, помимо числа m, являются:

-    отображаемое число, переменная C# (фигура 2);

-    экранные абсцисса и ордината левого нижнего угла цифровой строки (при горизонтальном чтении), переменные X и Y;

-    параметр ориентации, переменная Dr; Dr=0 соответствует горизонтальному, а Dr=1 вертикальному расположению цифровой строки.

Способ ввода названных параметров определяется логикой основной программы, формирующей графический объект. Формирование горизонтальной строки выполняется с помощью подпрограммы G, а вертикальной – подпрограммы V, обслуживающих блок синтеза знака. Горизонтальное расположение строки выполняется путем чтения опорного массива по строкам и столбцам от значений индексов I и J, cоответствующих единице, до значений I=m и J=m-1. Формирование строки и межзнакового интервала выполняется оператором PSET(X+J-1,Y+I-1). Для символа «1» межзнаковый интервал корректируется в строках 3 и 4 (фигура 2). Вертикальная строка формируется путем чтения опорного массива по столбцам от значения индекса J=1 до значения J=m-1 и по строкам от значения I=m до значения I=1. Строка и межзнаковый интервал формируются с помощью оператора PSET(X+m-I,Y+J-1).

На фигуре 3 изображен пример графика, оси которого оцифрованы описанным программным генератором. Размер знаков оцифровки для горизонтальной оси соответствует m=5, вертикальной m=6. Размер знаков цифровой строки в левом верхнем углу соответствует m=9. Символы “X”, “Y” и “Фиг.3” получены штатными средствами с помощью оператора PRINT.


Постоянный адрес статьи:
http://swsys.ru/index.php?page=article&id=890
Версия для печати
Выпуск в формате PDF (1.53Мб)
Статья опубликована в выпуске журнала № 3 за 2000 год.

Возможно, Вас заинтересуют следующие статьи схожих тематик: