#svg #2d #shape #point #rotating #polyline #stationary

bin+lib spiropath

使用任意路径的通用 Spirograph

1 个不稳定版本

0.1.1 2021 年 5 月 19 日
0.1.0 2021 年 5 月 19 日

#267 in 可视化

GPL-3.0 许可证

2.5MB
1.5K SLoC

spiropath

license crates.io Build Status codecov Docs

通用 Spirograph 程序,允许使用作为 SVG 路径指定的任意旋转和固定形状。

安装

要安装

cargo install spiropath

使用

此包安装了一个 spiropath 程序,您可以直接从命令行调用:spiropath -s stationary.svg -r rotating.svg -o output.svg,其中 stationary.svg 包含一个固定形状的单个 SVG 路径,而 rotating.svg 包含围绕它旋转的形状的单个 SVG 路径。输出 SVG 文件将包含一个多段线,追踪固定在旋转形状上的点在旋转形状周围移动的路径。

此外,此包还提供与 spiropath::spiropath 库函数相同的函数(不包含文件输入/输出),您可以在自己的代码中使用。

一个“经典”的 Spirograph 只使用圆形作为固定和旋转形状。一些 Spirograph 程序(或物理集)提供更多形状,但通常这些形状仅限于直线和圆弧的组合,并且整体配置(即使在程序中)也受到物理学的限制(例如,追踪点必须位于旋转形状内部)。

相比之下,Spiropath 对固定和旋转形状(除了要求它们是连续封闭路径外)或追踪点的位置没有任何限制:旋转形状在固定形状周围移动时忽略任何碰撞,并且追踪点随着它一起移动。因此,您不仅可以使用任何三次曲线(而不是仅限于直线和圆弧)来指定形状,还可以使用非凸形状(甚至自相交形状),并且通常指定使用物理 Spirograph 设备无法实现的配置(例如,将追踪点放置在旋转形状外部)。

通常,输出 SVG 需要在最终可视化之前进一步处理(例如使用 Inkscape),因此 Spiropath 不提供控制路径颜色、样式、宽度等选项。

Spinopath 提供了指定静态和旋转形状相对大小的选项(每个形状上的“齿”的数量),精度公差(以齿大小的分数表示),输出大小(其边界框),旋转形状的初始旋转和偏移量,被追踪点在旋转形状坐标中的位置,以及旋转形状是放置在静态形状的“内部”还是“外部”。

生成的折线会有很多点(取决于公差);理想情况下,我们会将其转换为使用 SVG 路径元素(如弧线和曲线)的紧凑表示。然而,我没有找到可以做到这一点的 Rust 库。如果您知道一个,请告诉我。

在此期间,您可以使用外部工具,例如使用 Inkscape 来手动简化路径,如“简化”部分所述 此处 或按以下说明自动化此操作 此处

许可证

spiropath 在 GNU AFFERO 通用公共许可证(版本 3.0)下分发。有关详细信息,请参阅 LICENSE

依赖项

约 9MB
约 227K SLoC