如何通过编程绘制具有自动图形松弛的非线性书写系统(例如,在d3.js中)
How can I programmatically draw a nonlinear writing system with automatic graph relaxation (e.g. in d3.js)?
Alex Fink&我有一种非线性的书面语言UNLWS。然而,在谷歌文档中维护其语法文档变得过于繁琐,因为加载每个图像需要花费大量时间,而且为嵌入gdocs而创建的图像并不能以良好的方式进行组合和导出。
UNLWS主要由各种字形组成,这些字形基本上是具有特定绑定点(词汇表中的蓝色小圆圈)的矢量艺术的小块,并且所有字形都在这些绑定点处使用各种方法(主要是简单的线)像图形一样相互连接(如树,而不是条形图)。
有些字形也有内部结构,例如可变的直线或弧长、样条曲线曲率、线段距离等,有些字形的绑定不是用线绘制的(例如文章)。
一般来说,只要字形连接正确,并遵循一些关于如何连接的规则(例如,避免交叉,尽可能画出平滑或直线,放松图形),结果就会是合法的。
然而,也有非图形组件,例如包围或分割文本部分的卡通,以及某些情况下,某些字形必须彼此靠近,并以特定的方向或距离放置。
在某些情况下,我们还想提示图形包如何更美观地进行布局,例如诗歌(注意中心和侧面的卡通图案)或故事(注意三种变体的黑色虚线)。有关一些更简单的示例,请参阅我们的草稿栏。
理想情况下,我们希望能够使用合理的图形库(可能是d3.js,尽管我对其他建议持开放态度)以编程方式编写此文件,例如:
- 定义可重复使用的字形(使用变量)
- 让我们制作自定义DSL来指定字形的形式(由较低级别的矢量"语音学"构建)以及它们如何交互(用于语法)
- 告诉包在什么绑定点连接什么字形以及如何连接,并让它弄清楚如何进行必要的图形松弛等,至少得到一个合理的结果
- 有选择地提示包如何进行布局
- 使用对齐/捕捉在不同位置添加英文文本(UNLWS本身没有,但它对文档很有用)
- 导出为标准矢量格式(例如用于打印海报或衬衫),并通过一些命令行工具导出到stdout(例如用于嵌入LaTeX)
这样做的好方法是什么?
我故意用一种开放式的方式来表达这一点,因为我不知道什么是合适的方法或包集(或者JS/D3一开始是否合适)。我可以想象,现有的包已经解决了部分问题(例如图松弛),但我对它们一点也不熟悉。
(FWIW:我们都是程序员。我广泛使用Ruby和d3.js。Alex是一名数学家,因此经常使用LaTeX和Asympute,但很少使用js。我们不受任何特定选项的限制,包括Javascript。)
d3中的Force布局可能是最好的起点-这是用于自动图形松弛工具的工具。
- RegEx删除空属性?例如,如果(class=“”||class=“”)移除;否则就下课
- 数据绑定:'系统Char'不包含名为'xxxxx'
- 在三个.js中创建球体(例如地球)的磁力线
- Javascript模块系统I'I’我正在努力,但搞不明白
- 是否可以在系统/电脑浏览器中访问手机摄像头
- Node JS中的排名系统算法
- 任何将(SSH)终端嵌入到一些HTML5表示系统中的想法(例如,show.js)
- 如何在foreach循环中对每个产品单独应用评级系统
- Javascript-修复搜索系统
- 是否有任何设置阻止JavaScript在系统上工作
- 如何组织用户系统的Mongo集合
- 数字文件命名系统
- 将javascript应用程序迁移到使用AMD的提示(例如requirejs)
- 如何对单个页面进行密码保护(这不是身份验证系统的一部分)
- 动态代码中存在系统应用程序地址错误
- 从自己的安全系统中重新找回自己
- 难以置信的简单密码系统不工作
- 在chrome.runtime消息系统中使用promise
- Javascript-正则表达式,用于在未转义字符上拆分字符串,例如|,但忽略|
- 如何通过编程绘制具有自动图形松弛的非线性书写系统(例如,在d3.js中)