REM Программа отображения таракана с векторной геометрией и точечной графикой
SCREEN 12 WIDTH 80 REM Начало координат ORIGIN_X = 320 ORIGIN_Y = 240 ORIGIN_Z = 0 REM Функция расстояния от начала координат DEF FN_DIST(X, Y, Z) = SQR(X^2 + Y^2 + Z^2) REM Функция проекции с учётом расстояния DEF FN_PROJ(X, Y, Z) = (X + Z / FN_DIST(X, Y, Z)) * 2, (Y + Z / FN_DIST(X, Y, Z)) * 2 REM Основные векторы тела BODY_VECTOR = 40 ' Длина тела HEAD_VECTOR = 20 ' Размер головы REM Функция заливки тела точечной графикой SUB FILL_BODY (X1, Y1, X2, Y2, COLOR) FOR X = X1 TO X2 FOR Y = Y1 TO Y2 IF POINT(X, Y) = 0 THEN PSET (X, Y), COLOR NEXT Y NEXT X END SUB REM Определяем границы тела BODY_LEFT = ORIGIN_X - BODY_VECTOR/2 BODY_RIGHT = ORIGIN_X + BODY_VECTOR/2 BODY_TOP = ORIGIN_Y - HEAD_VECTOR BODY_BOTTOM = ORIGIN_Y + HEAD_VECTOR REM Рисуем контур тела LINE (FN_PROJ(BODY_LEFT, BODY_TOP, ORIGIN_Z), FN_PROJ(BODY_RIGHT, BODY_BOTTOM, ORIGIN_Z)), 14, BF REM Заполняем тело точечной графикой FILL_BODY BODY_LEFT, BODY_TOP, BODY_RIGHT, BODY_BOTTOM, 14 REM Рисуем голову с учётом расстояния CIRCLE (FN_PROJ(ORIGIN_X - BODY_VECTOR, ORIGIN_Y, ORIGIN_Z)), _ HEAD_VECTOR / FN_DIST(ORIGIN_X, ORIGIN_Y, ORIGIN_Z), 14,,, 1 REM Усы (векторное направление) LINE (FN_PROJ(ORIGIN_X - BODY_VECTOR, ORIGIN_Y - HEAD_VECTOR, ORIGIN_Z), _ FN_PROJ(ORIGIN_X - BODY_VECTOR - 30, ORIGIN_Y - HEAD_VECTOR - 20, ORIGIN_Z)), 14 LINE (FN_PROJ(ORIGIN_X - BODY_VECTOR, ORIGIN_Y + HEAD_VECTOR, ORIGIN_Z), _ FN_PROJ(ORIGIN_X - BODY_VECTOR - 30, ORIGIN_Y + HEAD_VECTOR + 20, ORIGIN_Z)), 14 REM Лапки с учётом расстояния FOR i = 1 TO 3 LINE (FN_PROJ(ORIGIN_X + i * 20, ORIGIN_Y - 10, ORIGIN_Z), _ FN_PROJ(ORIGIN_X + i * 20 + 20, ORIGIN_Y - 30, ORIGIN_Z)), 14 NEXT i REM Глаза (с учётом расстояния) PSET (FN_PROJ(ORIGIN_X - BODY_VECTOR + 5, ORIGIN_Y - 5, ORIGIN_Z)), 15 PSET (FN_PROJ(ORIGIN_X - BODY_VECTOR + 5, ORIGIN_Y + 5, ORIGIN_Z)), 15 REM Ожидание DO: LOOP UNTIL INKEY$ <> "" END
🔓КОЗЛОВА (ПУДОВКИНА) ЕКАТЕРИНА
REM Программа отображения таракана с векторной геометрией и точечной графикой
SCREEN 12
WIDTH 80
REM Начало координат
ORIGIN_X = 320
ORIGIN_Y = 240
ORIGIN_Z = 0
REM Функция расстояния от начала координат
DEF FN_DIST(X, Y, Z) = SQR(X^2 + Y^2 + Z^2)
REM Функция проекции с учётом расстояния
DEF FN_PROJ(X, Y, Z) = (X + Z / FN_DIST(X, Y, Z)) * 2, (Y + Z / FN_DIST(X, Y, Z)) * 2
REM Основные векторы тела
BODY_VECTOR = 40 ' Длина тела
HEAD_VECTOR = 20 ' Размер головы
REM Функция заливки тела точечной графикой
SUB FILL_BODY (X1, Y1, X2, Y2, COLOR)
FOR X = X1 TO X2
FOR Y = Y1 TO Y2
IF POINT(X, Y) = 0 THEN PSET (X, Y), COLOR
NEXT Y
NEXT X
END SUB
REM Определяем границы тела
BODY_LEFT = ORIGIN_X - BODY_VECTOR/2
BODY_RIGHT = ORIGIN_X + BODY_VECTOR/2
BODY_TOP = ORIGIN_Y - HEAD_VECTOR
BODY_BOTTOM = ORIGIN_Y + HEAD_VECTOR
REM Рисуем контур тела
LINE (FN_PROJ(BODY_LEFT, BODY_TOP, ORIGIN_Z), FN_PROJ(BODY_RIGHT, BODY_BOTTOM, ORIGIN_Z)), 14, BF
REM Заполняем тело точечной графикой
FILL_BODY BODY_LEFT, BODY_TOP, BODY_RIGHT, BODY_BOTTOM, 14
REM Рисуем голову с учётом расстояния
CIRCLE (FN_PROJ(ORIGIN_X - BODY_VECTOR, ORIGIN_Y, ORIGIN_Z)), _ HEAD_VECTOR / FN_DIST(ORIGIN_X, ORIGIN_Y, ORIGIN_Z), 14,,, 1
REM Усы (векторное направление)
LINE (FN_PROJ(ORIGIN_X - BODY_VECTOR, ORIGIN_Y - HEAD_VECTOR, ORIGIN_Z), _ FN_PROJ(ORIGIN_X - BODY_VECTOR - 30, ORIGIN_Y - HEAD_VECTOR - 20, ORIGIN_Z)), 14
LINE (FN_PROJ(ORIGIN_X - BODY_VECTOR, ORIGIN_Y + HEAD_VECTOR, ORIGIN_Z), _ FN_PROJ(ORIGIN_X - BODY_VECTOR - 30, ORIGIN_Y + HEAD_VECTOR + 20, ORIGIN_Z)), 14
REM Лапки с учётом расстояния
FOR i = 1 TO 3
LINE (FN_PROJ(ORIGIN_X + i * 20, ORIGIN_Y - 10, ORIGIN_Z), _ FN_PROJ(ORIGIN_X + i * 20 + 20, ORIGIN_Y - 30, ORIGIN_Z)), 14
NEXT i
REM Глаза (с учётом расстояния)
PSET (FN_PROJ(ORIGIN_X - BODY_VECTOR + 5, ORIGIN_Y - 5, ORIGIN_Z)), 15
PSET (FN_PROJ(ORIGIN_X - BODY_VECTOR + 5, ORIGIN_Y + 5, ORIGIN_Z)), 15
REM Ожидание
DO: LOOP UNTIL INKEY$ <> ""
END
SCREEN 12
WIDTH 80
REM Начало координат
ORIGIN_X = 320
ORIGIN_Y = 240
ORIGIN_Z = 0
REM Функция расстояния от начала координат
DEF FN_DIST(X, Y, Z) = SQR(X^2 + Y^2 + Z^2)
REM Функция проекции с учётом расстояния
DEF FN_PROJ(X, Y, Z) = (X + Z / FN_DIST(X, Y, Z)) * 2, (Y + Z / FN_DIST(X, Y, Z)) * 2
REM Основные векторы тела
BODY_VECTOR = 40 ' Длина тела
HEAD_VECTOR = 20 ' Размер головы
REM Рисуем тело (используем векторное масштабирование)
LINE (FN_PROJ(ORIGIN_X - BODY_VECTOR/2, ORIGIN_Y - HEAD_VECTOR, ORIGIN_Z), _ FN_PROJ(ORIGIN_X + BODY_VECTOR/2, ORIGIN_Y + HEAD_VECTOR, ORIGIN_Z)), 14, BF
REM Рисуем голову с учётом расстояния
CIRCLE (FN_PROJ(ORIGIN_X - BODY_VECTOR, ORIGIN_Y, ORIGIN_Z)), _ HEAD_VECTOR / FN_DIST(ORIGIN_X, ORIGIN_Y, ORIGIN_Z), 14,,, 1
REM Усы (векторное направление)
LINE (FN_PROJ(ORIGIN_X - BODY_VECTOR, ORIGIN_Y - HEAD_VECTOR, ORIGIN_Z), _ FN_PROJ(ORIGIN_X - BODY_VECTOR - 30, ORIGIN_Y - HEAD_VECTOR - 20, ORIGIN_Z)), 14
LINE (FN_PROJ(ORIGIN_X - BODY_VECTOR, ORIGIN_Y + HEAD_VECTOR, ORIGIN_Z), _ FN_PROJ(ORIGIN_X - BODY_VECTOR - 30, ORIGIN_Y + HEAD_VECTOR + 20, ORIGIN_Z)), 14
REM Лапки с учётом расстояния
FOR i = 1 TO 3
LINE (FN_PROJ(ORIGIN_X + i * 20, ORIGIN_Y - 10, ORIGIN_Z), _ FN_PROJ(ORIGIN_X + i * 20 + 20, ORIGIN_Y - 30, ORIGIN_Z)), 14
NEXT i
REM Глаза (с учётом расстояния)
PSET (FN_PROJ(ORIGIN_X - BODY_VECTOR + 5, ORIGIN_Y - 5, ORIGIN_Z)), 15
PSET (FN_PROJ(ORIGIN_X - BODY_VECTOR + 5, ORIGIN_Y + 5, ORIGIN_Z)), 15
REM Ожидание
DO: LOOP UNTIL INKEY$ <> ""
END