DSL для синтеза изображений в Clojure

Я экспериментирую с созданием небольшой библиотеки/DSL для синтеза изображений в Clojure. В основном идея состоит в том, чтобы позволить пользователям библиотеки составлять наборы математических функций для процедурного создания интересных изображений.

Функции должны работать с двойными значениями и принимать форму преобразования вектора местоположения в значение цвета, например (x,y,z) -> (r,g,b,a)

Однако я столкнулся с несколькими интересными дизайнерскими решениями:

  • Входные данные могут иметь 1,2,3 или даже 4 измерения (x ,y,z плюс время)
  • Было бы хорошо обеспечить векторные математические операции (точечные произведения, сложение, умножение и т. д.)
  • Было бы полезно составить функции с такими операциями, как поворот, масштабирование и т. д.
  • Из соображений производительности важно везде использовать примитивные двойные вычисления (т. е. избегать создания коробочных двойников, в частности). Таким образом, функция, которая должна возвращать красный, зеленый и синий компоненты, возможно, должна стать тремя отдельными функциями, которые возвращают примитивные значения красного, зеленого и синего соответственно.

Любые идеи о том, как такого рода DSL можно реализовать в Clojure (бета-версия 1.4)?

6
задан mikera 15 May 2012 в 07:32
поделиться