#functional-programming #higher-order #3d #geometry #maps #construct #homotopy

piston3d-construct

一个用于使用同伦映射构建3D几何的高阶函数式编程库

1 个不稳定版本

使用旧的Rust 2015

0.1.0 2017年9月1日

数学 中排名第1574

MIT 协议

18KB
268

构建

一个用于使用同伦映射构建3D几何的高阶函数式编程库

car

什么是同伦映射?

同伦是一种在两个函数之间的连续变形。想象一下将两个函数 fg 结合起来,使用一个介于0和1之间的参数,使得将参数设置为0给出 f,将参数设置为1给出 g。换句话说,它允许你在函数之间平滑插值。

此库使用专为构建3D几何设计的简化同伦版本

/// A function of type `1d -> 3d`.
pub type Fn1<T> = Arc<Fn(T) -> [T; 3] + Sync + Send>;
/// A function of type `2d -> 3d`.
pub type Fn2<T> = Arc<Fn([T; 2]) -> [T; 3] + Sync + Send>;
/// A function of type `3d -> 3d`.
pub type Fn3<T> = Arc<Fn([T; 3]) -> [T; 3] + Sync + Send>;

在此库中,这些函数被称为 同伦映射,通常满足以下属性

  • 所有输入都假定已归一化,从0开始,到1结束。这意味着 Fn1 形成一个曲线线,Fn2 形成一个曲线四边形,而 Fn3 形成一个曲线立方体。
  • Arc 智能指针使克隆闭包成为可能。
  • SyncSend 约束使多线程编程变得更容易。
  • 基本几何形状在0到1的范围内是连续的。

一个弯曲的立方体并不意味着它需要看起来像一个立方体。实际上,你可以创建各种看起来根本不像立方体的形状,例如一个球体。所说的“弯曲立方体”是指有3个参数在0到1之间控制点的生成。如果你使用恒等映射,你会得到一个立方体形状。将其他形状转换为这种形状是它被称为“弯曲立方体”的原因。

动机

构建3D几何是一个迭代过程,最终的设计/需求可能与最初的草图大相径庭。在游戏引擎中,还有其他需求,如生成各种细节的多个模型,或根据目标平台的容量调整模型。这使得有必要拥有一些工具,可以在不考虑大量技术细节的情况下工作。

同伦映射具有这样一个特性:可以根据需要构建几何形状,而不需要任何额外的指令。这使得它非常适合与高级函数式编程相结合。函数在提供准确表示的同时也具有惰性,例如可以相交一个曲面立方体以得到一个曲面四边形。

这个库是一个实验,旨在探讨如何利用同伦映射和高级函数式编程来迭代设计。函数名非常简短,以提供良好的用户体验。

依赖项

~68KB