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
Присоединяйтесь — мы покажем вам много интересного
Присоединяйтесь к ОК, чтобы подписаться на группу и комментировать публикации.
Нет комментариев