Clojure で画像合成用の小さなライブラリ/DSL を作成しようとしています。基本的には、ライブラリのユーザーが一連の数学関数を構成して、興味深い画像を手続き的に作成できるようにするという考え方です。
関数は double 値を操作する必要があり、(x,y,z) - > (r,g,b,a) など、位置ベクトルをカラー値に変換する形式を取る必要があります。
ただし、いくつかの興味深い設計上の決定に直面しています。
- 入力は 1、2、3、または 4 次元 (x、y、z と時間) を持つことができます。
- ベクトル演算 (ドット積、加算、乗算など) を提供するとよいでしょう。
- 回転、拡大縮小などの操作で関数を構成することは価値があります。
- パフォーマンス上の理由から、プリミティブ double 演算を全体で使用することが重要です (つまり、特に boxed double を作成しないでください)。したがって、赤、緑、青のコンポーネントを返す必要がある関数は、おそらく赤、緑、青のプリミティブ値をそれぞれ返す 3 つの別個の関数にする必要があります。
この種の DSL を Clojure (1.4 ベータ版) で合理的に実現する方法についてのアイデアはありますか?