Apeirogon
Apeirogon является логическим развитием проекта Scato. Пока Apeirogon находится в процессе развития. Проект размещается на этом же сайте.
Отличия от Scato
- Язык
- Унифицированы встроенные и пользовательские функции: теперь любой вызов возвращает результат. Это позволяет в большинстве случаев обойтись без временных переменных.
- Унифицирована работа с графическим контекстом.
- Расширен набор возможностей.
- Добавлены средства отладки.
- Средства создания анимированных роликов.
- Средства работы с различными цветовыми схемами.
- Расширен набор математических функций.
- Реализация
- Python 3.
- Qt 4.
- Всё сделано единым скриптом, что упрощает установку.
Требования к системе
Установка
Dowload
Программу можно взять из SVN:
svn co https://scato.googlecode.com/svn/branches/apeirogon
Если у вас нет возможности использовать SVN-клиент, то программу можно взять по ссылке:
http://scato.googlecode.com/svn/branches/apeirogon/apeirogon
Под Linux
Необходимо установить пакеты, Python3 и PyQt, после чего скрипт можно запускать.
Под Windows
Необходимые компоненты можно взять по ссылкам:
Файл с программой следует переименовать в apeirogon.py. После этого он будет запускаться как любое Windows-приложение.
Памятка
Краткая справка по командам.
| Имя | Аргументы | Эффект | Значение | Комментарий |
| print | E | нет | 1. | Вывод значения выражения на экран |
| dump | n | нет | 1. | Вывод на экран значения переменной, её имени и положения в коде программы |
| pause | (нет) | нет | 1. | Выполнения программы останавливается до вмешательства пользователя |
| save | E | нет | 1. | Сохраняет текущее изображение в файл apeirogon-NNNNN.bmp |
| def | n1 E2 | есть | 1. | Создаётся функция с именем n1 и телом E2 |
| call | n | нет | П.В. | Вызывается функция |
| if | E1 E2 | нет | 0.|П.В. | Если E1, то выполняется E2 |
| ifelse | E1 E2 E3 | нет | П.В. | Если E1, то выполняется E2; в противном случае выполняется E3 |
| repeat | E1 E2 | нет | П.В. | E2 выполняется E1 раз |
| while | E1 E2 | нет | П.В. | E2 выполняется пока E1 |
| local | E | исключён | П.В. | Выражение выполняется в локальном контексте |
| set | n1 E2 | n1 := E2 | E2 | Присваивает переменной заданное значение. При необходимости переменная создаётся |
| add | n1 E2 | n1 := n1 + E2 | n1 + E2 | - |
| mul | n1 E2 | n1 := n1 * E2 | n1 * E2 | - |
| div | n1 E2 | n1 := n1 / E2 | n1 / E2 | - |
| incr | n | n := n + 1 | n + 1 | - |
| decr | n | n := n * 1 | n * 1 | - |
| neg | n | n := -n | -n | - |
| hsv2rgb | E1 E2 E3 n4 n5 n6 | есть | 1. | Значения трёх выражений интерпретируются как RGB-цвет; этот цвет переводится в HSV-схему и значения H, S, V присваиваются переменным |
| sum | E1 E2 | нет | E1 + E2 | - |
| diff | E1 E2 | нет | E1 - E2 | - |
| prod | E1 E2 | нет | E1 * E2 | - |
| fract | E1 E2 | нет | E1 / E2 | - |
| gt | E1 E2 | нет | E1 > E2 | - |
| lt | E1 E2 | нет | E1 < E2 | - |
| eq | E1 E2 | нет | E1 == E2 | - |
| ne | E1 E2 | нет | E1 != E2 | - |
| minus | E | нет | - E | - |
| inv | E | нет | 1 / E | - |
| sqrt | E | нет | sqrt(E) | - |
| abs | E | нет | |E| | - |
| sign | E | нет | sign(E) | - |
| pow | E1 E2 | нет | E1 ^ E2 | - |
| sin | E | нет | sin(E) | - |
| cos | E | нет | cos(E) | - |
| atan2 | E1 E2 | нет | atan(E1/E2) | ATAN2 |
| seed | E | есть | E | Устанавливается начальное значение для датчика случайных чисел |
| rand | (нет) | есть | RND | Случайное число |
| time | (нет) | нет | TIME | Время |
| scale | E | есть | E | Масштабирование системы координат |
| right | E | есть | $a | Поворот вправо |
| left | E | есть | $a | Поворот влево |
| color | E1 E2 E3 | есть | 1. | Устанавливает цвет в формате RGB |
| mixcolor | E1 E2 E3 E4 | есть | 1. | Подмешивает к текущему цвет в формате RGB в заданной пропорции |
| width | E | есть | $w | Устанавливает толщину линии |
| bgcolor | E1 E2 E3 | есть | 1. | Устанавливает цвет фона (существующее изображение стирается) |
| draw | E1 E2 | есть | 1. | Отрисовывает линию с заданным смещением |
| jump | E1 E2 | есть | 0. | Перемещается на заданное смещение |
Обозначения:
- Ex -- выражения (которое может состоять просто из имени переменной)
- nx -- имя переменной (строго)
Что ещё следует доделать
- Сохранение и экспорт
- Обработка параметров командной строки
- Геометрия
- Файл с программой
- Обучающие и демонстрационные примеры кода
- Возможность изменения размеров области рисования независимо от размеров окна
- Интерактивный режим
Направление развития
- Следует подумать о переносе этой идеи на JavaScript/Canvas-реализацию.