我正在尝试用Clojure创建一个小型图像合成库/DSL。基本上,想法是允许库的用户组合一些数学函数来程序化地创建有趣的图像。
这些函数需要在双精度值上操作,并采用将位置向量转换为颜色值的形式,例如 (x,y,z) -> (r,g,b,a)
然而,我面临着一些有趣的设计决策:
- 输入可能具有1、2、3或甚至4个维度(x、y、z加上时间)
- 最好提供向量数学运算(点积、加法、乘法等)
- 组合函数与旋转、缩放等操作非常有价值
- 出于性能原因,始终使用原始双精度数学很重要(即避免特别创建装箱双精度)。因此,需要返回红色、绿色和蓝色分量的函数可能需要变成三个分别返回原始红色、绿色和蓝色值的函数。
您对如何在 Clojure(1.4 beta)中合理实现这种 DSL 有什么想法吗?