如何通过编程绘制具有自动图形松弛的非线性书写系统(例如,在d3.js中)

How can I programmatically draw a nonlinear writing system with automatic graph relaxation (e.g. in d3.js)?

本文关键字:例如 系统 书写 js d3 非线性 绘制 编程 何通过 图形      更新时间:2023-09-26

Alex Fink&我有一种非线性的书面语言UNLWS。然而,在谷歌文档中维护其语法文档变得过于繁琐,因为加载每个图像需要花费大量时间,而且为嵌入gdocs而创建的图像并不能以良好的方式进行组合和导出。

UNLWS主要由各种字形组成,这些字形基本上是具有特定绑定点(词汇表中的蓝色小圆圈)的矢量艺术的小块,并且所有字形都在这些绑定点处使用各种方法(主要是简单的线)像图形一样相互连接(如树,而不是条形图)。

有些字形也有内部结构,例如可变的直线或弧长、样条曲线曲率、线段距离等,有些字形的绑定不是用线绘制的(例如文章)。

一般来说,只要字形连接正确,并遵循一些关于如何连接的规则(例如,避免交叉,尽可能画出平滑或直线,放松图形),结果就会是合法的。

然而,也有非图形组件,例如包围或分割文本部分的卡通,以及某些情况下,某些字形必须彼此靠近,并以特定的方向或距离放置。

在某些情况下,我们还想提示图形包如何更美观地进行布局,例如诗歌(注意中心和侧面的卡通图案)或故事(注意三种变体的黑色虚线)。有关一些更简单的示例,请参阅我们的草稿栏。

理想情况下,我们希望能够使用合理的图形库(可能是d3.js,尽管我对其他建议持开放态度)以编程方式编写此文件,例如:

  • 定义可重复使用的字形(使用变量)
  • 让我们制作自定义DSL来指定字形的形式(由较低级别的矢量"语音学"构建)以及它们如何交互(用于语法)
  • 告诉包在什么绑定点连接什么字形以及如何连接,并让它弄清楚如何进行必要的图形松弛等,至少得到一个合理的结果
  • 有选择地提示包如何进行布局
  • 使用对齐/捕捉在不同位置添加英文文本(UNLWS本身没有,但它对文档很有用)
  • 导出为标准矢量格式(例如用于打印海报或衬衫),并通过一些命令行工具导出到stdout(例如用于嵌入LaTeX)

这样做的好方法是什么?

我故意用一种开放式的方式来表达这一点,因为我不知道什么是合适的方法或包集(或者JS/D3一开始是否合适)。我可以想象,现有的包已经解决了部分问题(例如图松弛),但我对它们一点也不熟悉。

(FWIW:我们都是程序员。我广泛使用Ruby和d3.js。Alex是一名数学家,因此经常使用LaTeX和Asympute,但很少使用js。我们不受任何特定选项的限制,包括Javascript。)

d3中的Force布局可能是最好的起点-这是用于自动图形松弛工具的工具。