开发工具数据可视化【免费下载链接】penroseCreate beautiful diagrams just by typing notation in plain text.项目地址https://gitcode.com/gh_mirrors/pe/penrose点击查看免费下载本文基于 Penrose 仓库中 group-theory 示例 展开介绍如何用纯文本记号描述抽象代数中的群Group并自动生成两种经典可视化——乘法表Cayley table与凯莱图Cayley graph。读完本文你将掌握 Group 领域的类型/谓词设计、Substance 乘法表的编码规范、两种 Style 的渲染逻辑以及如何借助 Mathematica 笔记本自动合成群论输入程序。一、示例概览一个可扩展的抽象代数可视化骨架group-theory 示例被 README 明确称为“群可视化的桩stub”即一个为后续扩展预留的骨架。它的核心思路是群完全由它的乘法表来指定可选附带生成元等元数据渲染层则从 Substance 程序出发自动推导布局。目录结构如下packages/examples/src/group-theory/ ├── Group.domain -- 类型与谓词定义 ├── MultiplicationTable.style -- 凯莱表乘法表可视化 ├── CayleyGraph.style -- 凯莱图可视化 ├── GroupToSubstance.nb -- Mathematica 笔记本自动合成 Substance 输入 ├── groups/ │ ├── dihedral-1.substance -- 二面体群 D12 阶 │ ├── dihedral-5.substance -- 二面体群 D510 阶 │ └── quaternions.substance -- 四元数群 Q88 阶 ├── quaternion-cayley-graph.trio.json └── quaternion-multiplication-table.trio.json其中*.trio.json是把 Substance / Style / Domain 三件套绑定成一次完整编译的清单文件可直接被 Penrose 编译器消费。二、Group.domain群的领域建模Group.domain 是整个示例的类型系统基石全部内容仅四个声明type Element -- an element of the group predicate IsIdentity( Element e ) -- asserts that e is the identity element predicate IsGenerator( Element g ) -- asserts that g is a generator of the group predicate IsProduct( Element a, Element b, Element c ) -- asserts that a b*c设计要点Element是唯一的基础类型群中的每个元素都对应一个Element实例IsIdentity(e)断言e是单位元供凯莱图样式高亮单位元IsGenerator(g)断言g是群的生成元供凯莱图样式区分生成元并绘制生成边IsProduct(a, b, c)断言群运算关系a b * c这是编码乘法表的唯一事实来源两个 Style 都依赖它。这种极简建模的好处是领域不绑定任何具体群从 2 阶的 D1 到 8 阶的 Q8只需更换 Substance 文件即可。三、Substance 输入如何用谓词编码一张乘法表群的“数据”全部写在 Substance 文件中。以 quaternions.substance四元数群 Q8为例其结构分为三部分1. 声明元素与角色Element g1 Element g2 ... Element g8 IsIdentity(g1) IsGenerator(g2) IsGenerator(g3)g1是单位元1g2 i、g3 j是生成元k ij故g4无需声明为生成元。2. 逐行编码乘法表每一行IsProduct(a, b, c)表示a b * c注意 README 与 domain 注释中的约定IsProduct( a, b, c )断言a b*c。例如IsProduct(g1,g1,g1) -- 1 * 1 1 IsProduct(g2,g1,g2) -- i * 1 i IsProduct(g2,g2,g1) -- i * i 1 IsProduct(g5,g2,g2) -- -1 * i -ig5 -1, g6 -i IsProduct(g4,g2,g3) -- k * i jg4 k, g3 jQ8 的完整表有 64 条IsProduct全部以这种原子谓词逐条罗列。注意参数的语义顺序IsProduct(结果, 左操作数, 右操作数)三个参数分别对应乘法表单元格的结果、行头与列头这一点直接决定后续 Style 如何把谓词映射到表内坐标。3. 可读化标签Label g1 $1$ Label g2 $i$ Label g3 $j$ Label g4 $k$ Label g5 $-1$ Label g6 $-i$ Label g7 $-j$ Label g8 $-k$Label把晦涩的g1..g8映射为 LaTeX 记号渲染时以数学公式形式展示。另外两个示例更小 dihedral-1.substance 只有 2 个元素D1 ≅ ℤ₂4 条乘积谓词dihedral-5.substance 有 10 个元素、两条生成元g2、g4和 100 条乘积谓词非常适合用来验证样式在更大规模下的表现。四、MultiplicationTable.style把乘法表画成网格MultiplicationTable.style 将群元素排布成经典凯莱表。整个样式分为两个层次第一层为每个元素计算行列坐标forall Element gscalar m match_id scalar n match_total scalar g.t m / n scalar g.u ( g.t - 0.5 ) * global.tableHeight scalar g.v ( (1.-g.t) - 0.5 ) * global.tableWidth scalar g.width global.tableWidth / n scalar g.height global.tableHeight / nmatch_id/match_total是 Penrose Style 提供的匹配上下文变量分别表示当前元素在匹配集合中的序号与总数。借助它们把每个元素映射到[0,1]区间再线性映射到画布坐标从而算出该元素对应的行/列标签位置rowLabel、colLabel均为Equation形状字号 8px。这一层还演示了“热力配色”Hot colors方案用g.t派生R/G/B分量并夹取到[0,1]生成与元素顺序相关的渐变boxColor。被注释掉的“Random colors”与“Rainbow colors”两段展示了其他可选配色思路可作为扩展起点。第二层为每个乘积绘制单元格forall repeatable Element a; Element b; Element c where IsProduct( a, b, c )shape productShape Rectangle { center: ( b.u, c.v ) width: a.width - global.boxPadding height: a.height - global.boxPadding cornerRadius: 2.0 fillColor: a.boxColor } shape productText Equation { string: a.label center: productShape.center fontSize: 8px fillColor: a.labelColor }关键映射关系IsProduct(a, b, c)中结果a提供颜色与单元格尺寸左操作数b提供列坐标b.u右操作数c提供行坐标c.v——这正是上一节强调的三参数语义在样式层的落地。repeatable关键字允许同一组元素在匹配中重复出现保证每个乘积单元格都能被绘制。全局参数tableWidth/tableHeight 180、boxPadding 2.0控制表格整体尺度与单元格间距可通过 Group.domain 对应的global块按需调整。五、CayleyGraph.style把群画成带箭头的图CayleyGraph.style 是更具几何深度的样式。它假定 Substance 已满足三条前提文件头部注释明确列出(i) 所有元素声明为Element(ii) 生成元通过IsGenerator标记(iii) 乘法表通过IsProduct给出。并特别指出画凯莱图并不需要完整乘法表只需提供“乘以各生成元”对应的那部分乘积即可但为了兼容其他样式示例仍倾向于生成完整表。样式的四组规则各司其职1. 节点绘制forall Element g每个元素画成一个半径 5 的小圆g.icon中心叠加Equation文本标签。ensureOnCanvas: true约束节点保持在画布内。2. 单位元标记forall Element e where IsIdentity(e)shape identityMarker Circle { center: e.icon.center r: 1.5*e.icon.r fillColor: rgba(0,0,0,.1) }在单位元外圈叠加一个半透明大圆起到视觉定位作用。3. 生成元高亮forall Element s where IsGenerator(s)scalar r ? scalar g ? scalar b ? ensure inRange(r,.25,1.0) ensure inRange(g,.25,1.0) ensure inRange(b,.25,1.0) override s.icon.fillColor rgba(r,g,b,1.0) override s.icon.strokeColor rgba(.7*r,.7*g,.7*b,1.0) override s.labelText.fillColor s.icon.strokeColor?是 Penrose 的“自由变量”语法颜色分量由优化器在[.25, 1.0]区间内自动求解于是每个生成元获得独特颜色且这条颜色会通过override级联到该生成元相关的边见第 4 组规则。4. 生成边与布局优化两个节点若满足IsProduct(g2, g1, s)即g2 g1 * s右乘生成元s则从g1指向g2绘制带箭头的二次贝塞尔曲线路径颜色沿用生成元的s.icon.fillColor并以白色描边pathOutline置于底层形成轮廓。布局由两类能量项驱动-- 所有节点两两之间库仑排斥 scalar d norm( x1 - x2 ) encourage equal( 0., 2.*sqr(1000./d) ) -- 有生成边相连的节点对弹簧吸引 scalar L global.targetEdgeLength encourage equal( 0., k*(d-L)*(d-L)/2. ) -- minimize ½ k(d-L)²所有节点对之间最小化库仑势2·(1000/d)²防止重叠生成边两端最小化弹簧势½k(d-L)²targetEdgeLength 40k 1让相连节点靠拢。最终节点的空间排布由 Penrose 优化器迭代求解而非手工指定坐标。文件注释中还保留了 IPCincremental potential contact排斥势的备选写法可替换库仑项以改善防穿透效果。六、巧用 IsGenerator可视化群的陪集与轨道README 特别强调了一个技巧同一份凯莱图样式只要把IsGenerator从“真正的生成元”换成任意群元素g就能可视化右乘g在群上诱导的轨道orbit/陪集分解。具体做法在 Substance 文件中删除原有的IsGenerator谓词改为IsGenerator(g)g为任意元素。由于凯莱图的边规则where IsGenerator(s); IsProduct( g2, g1, s )只关心“被标记的生成元”其他部分节点、单位元标记、排斥/弹簧优化均不受影响样式无需任何改动即可复用。这为探索群的循环子群结构、陪集划分提供了零成本的实验入口。七、编译运行trio.json 清单与产物仓库为四元数群提供了两个开箱即用的编译清单quaternion-cayley-graph.trio.json{ substance: ./groups/quaternions.substance, style: [./CayleyGraph.style], domain: ./Group.domain, variation: MeadowbrookChimpanzee02726 }quaternion-multiplication-table.trio.json结构相同仅将 style 换成./MultiplicationTable.style。variation字段是 Penrose 优化器的随机种子用于复现一致的布局结果。运行方式与仓库其他示例一致在packages/examples下通过编译管线消费 trio 清单或直接修改 substance/style/domain 三者之一重新编译Style 中的?自由变量、布局能量项都由 core 引擎 的优化器求解。也可把groups/下任一 substance 与任一 style 自由组合——例如把dihedral-5.substance配CayleyGraph.style观察 D5 的凯莱图这正是“从这些示例出发扩展其他标准样式”的推荐路径。八、GroupToSubstance.nb用 Mathematica 免手输乘法表对高阶群逐条手写IsProduct极易出错。README 明确指出有 Mathematica或同类计算机代数系统的用户从已有群描述合成 Substance 输入远比手敲乘法表容易。为此仓库提供了 GroupToSubstance.nb它基于 Mathematica 内置的大型群库自动把任意群导出为上文格式的 Substance 程序——包括元素声明、IsIdentity/IsGenerator/IsProduct谓词与Label。生成结果可直接接入 Group.domain 和两个 Style形成“代数系统 → Substance → 自动可视化”的完整流水线。九、扩展方向从代码结构可以推断该领域刻意保持最小接口为后续扩展留足了空间新增样式README 明示“从这些示例出发构建群的其他标准可视化表示很容易”例如子群格subgroup lattice、群的运算表热力图、生成元关系图等均可复用Element/IsProduct这一套事实扩展领域可在 Group.domain 增加如IsInverse(a, b)、IsSubgroupOf(...)等谓词配合新样式描述更丰富的代数结构复用轨道技巧第六节的IsGenerator(g)换用技巧本质是把“生成元”角色泛化为“任意右乘元素”可直接推广为通用的陪集可视化模块。小结group-theory 示例展示了 Penrose“陈述式可视化”范式的完整闭环领域层domain定义代数事实的最小词汇表数据层substance用原子谓词无歧义地编码乘法表样式层style把事实映射为几何与能量约束优化器负责最终的自动布局。对抽象代数教学、群论课件插图和算法可视化来说这是一套可复制、可裁剪、可扩展的现成方案。赞分享开发工具数据可视化【免费下载链接】penroseCreate beautiful diagrams just by typing notation in plain text.项目地址https://gitcode.com/gh_mirrors/pe/penrose点击查看免费下载相关推荐Penrose 光线追踪示例包用 Domain、Style、Substance 三语言绘制渲染与光传输算法示意图Penrose 光线追踪示例包用 Domain、Style、Substance 三语言绘制渲染与光传输算法示意图 导读 Penrose 的核心愿景是“用纯文本开发工具数据可视化Penrose 实战指南用 Domain–Substance–Style 三语言纯文本绘制集合论欧拉图Penrose 实战指南用 Domain–Substance–Style 三语言纯文本绘制集合论欧拉图 Penrose 是一个只靠纯文本符号就能生成高质量图开发工具数据可视化Cayley 链接数据文件格式转换指南cayley convert 命令深度解析Cayley 链接数据文件格式转换指南 cayley convert 命令深度解析 链接数据Linked Data在 RDF 生态中存在多种文件表示形式图数据库数据库后端上一篇Datasette 插件测试完全指南使用 pytest、datasette.client 与 fixtures 数据库编写可靠的自动化测试下一篇FanControl多语言支持从零开始的本地化设置指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
