新闻详情

新闻详情

首页 / 资讯中心 / 详情

Penrose Style 函数全参考:约束函数、目标函数与计算函数详解

发布时间:2026/9/28 18:23:11来源:尧图网络
Penrose Style 函数全参考:约束函数、目标函数与计算函数详解
开发工具数据可视化【免费下载链接】penroseCreate beautiful diagrams just by typing notation in plain text.项目地址https://gitcode.com/gh_mirrors/pe/penrose点击查看免费下载Style 是 Penrose 项目中负责把 Substance 语义对象变成漂亮图形的布局语言而函数则是 Style 程序的运算核心约束函数Constraint Function配合ensure语句施加硬性几何条件目标函数Objective Function配合encourage语句驱动能量最小化计算函数Computation Function则用于计算颜色、路径、矩阵等任意中间值。本文以仓库中的官方参考页 functions.md 为骨架完整收录三大类内置函数、全部参数与默认值并结合penrose/core的源码与测试说明每个函数在编译器中的实际调度方式与底层实现帮助你直接在自己的 Style 程序中按名调用。函数在 Style 程序中的角色与调度机制Style 程序中的函数调用分为三种语句形态语法见 selector-blocks.mdensure constraint_name (argument_list) # 调用约束函数产生约束能量 encourage objective_name (argument_list) # 调用目标函数产生优化目标计算函数则不产生能量而是作为普通表达式求值其返回值可被继续用于计算或作为形状属性。三类函数分别注册在三个字典中由 Style 编译器在求值时按名查表约束字典constrDict定义于 Constraints.ts由constrDictSimple、constrDictGeneral、constrDictSpecific与来自 Curves.ts 的constrDictCurves四部分合并而成目标字典objDict定义于 Objectives.ts同样分为objDictSimple、objDictGeneral、objDictSpecific三部分计算字典compDict定义于 Functions.ts是体积最大的一份。编译器 Style.ts 在求值CompApp计算函数调用时执行isKeyOf(name.value, compDict)检查并分发到callCompFunc处理ConstrFn/ObjFn时分别执行isKeyOf(fname, constrDict)/isKeyOf(fname, objDict)若函数名未注册会抛出InvalidFunctionNameError/InvalidConstraintNameError/InvalidObjectiveNameError随后把求出的能量值压入trans.constraints或trans.objectivesStyle.ts 与 Style.ts。函数签名的数据结构由 functions.ts 定义每个函数是{ name, params, body, description?, returns? }其中params为{ name, type, default?, description? }列表约束与目标函数返回ad.Num可微数值计算函数返回Valuead.Num。此外所有函数体统一返回MayWarnT包装即{ value, warnings }允许函数在无法精确计算时例如形状距离退化到包围盒近似产生BBoxApproximationWarning警告而非直接失败。关于参数类型参考页表格中的类型描述符realT、real2T、realNT、realNMT、shapeT、shapeListT、booleanT、colorT、unitT、posIntT、natT、stringT、pathCmdT、rectlikeT、unionT等对应 value-types.md 中描述的运行时值类别实数、布尔、字符串、路径数据、点列表、颜色、数值列表、向量、矩阵、元组、形状列表等其中?表示待优化的未知量见 expressions.md。约束函数Constraint Functions约束函数把几何或数值条件编码为当条件满足时趋近于 0 的惩罚能量能量越低条件越满足。参考页按复杂度把它们划分为 Simple简单、General通用与 Specific特定三类另加曲线专用约束。简单约束直接操作数值参数这类约束不查询形状直接作用于ad.Num参数函数参数默认值语义与实现要点equalx, y—要求x y能量为\|x - y\|源码 Constraints.tslessThanx, y, paddingpadding 0要求x y能量为x - y paddinggreaterThanx, y, paddingpadding 0要求x y能量为y - x paddinglessThanSqx, y—更陡的惩罚if x y then 0 else (x - y)^2greaterThanSqx, y—更陡的惩罚if y x then 0 else (y - x)^2inRangex, x0, x1—要求x ∈ [x0, x1]超出边界才产生惩罚contains1D[l1, r1], [l2, r2]—区间包含max(0, l1 - l2) max(0, r2 - r1)disjointScalarc, left, right—标量c与区间[left, right]不相交perpendicularq, p, r—向量(q,p)与(r,p)垂直能量为两向量点积绝对值collinearc1, c2, c3—三点共线不限定顺序取最容易满足的排列能量为两向量叉积绝对值collinearOrderedc1, c2, c3—三点共线且保持给定顺序用三角形不等式max(0, \|v1\|\|v2\|-\|v3\|)惩罚通用约束作用于任意形状通用约束对任意形状shapeT(AnyShape)都可用通常通过包围盒查询或调用多个具体约束实现函数参数默认值语义与实现要点onCanvasshape, canvasWidth, canvasHeight—要求形状位于画布内把形状包围盒与[-w/2, w/2] × [-h/2, h/2]做二维contains1D所有形状的ensureOnCanvas属性默认true即调用它见 shapes-overview.mdoverlappings1, s2, overlapoverlap 0要求s1与s2有至少overlap的重叠基于形状距离shapeDistance实现overlappingEllipsesc1, rx1, ry1, c2, rx2, ry2, overlapoverlap 0两个椭圆重叠通过隐式椭圆函数与 Minkowski 判定overlappingCircleEllipsec1, r1, c2, rx2, ry2, overlapoverlap 0圆与椭圆重叠disjoints1, s2, paddingpadding 0要求s1与s2至少相距padding实现为overlapping的取负touchings1, s2, paddingpadding 0要求s1与s2相切能量为重叠量的绝对值containss1, s2, paddingpadding 0要求s1包含s2按形状类型组合分派圆-圆、多边形-多边形、多边形-圆、矩形-圆、Group 等不支持的类型对退回包围盒矩形包含并产生BBoxApproximationWarningcontainsCirclesc1, r1, c2, r2, paddingpadding 0圆包含圆d - (r1 - r2 - padding)containsPolyspts1, pts2, paddingpadding 0多边形包含多边形逐个顶点取最大惩罚containsPolyCirclepts, c, r, paddingpadding 0多边形包含圆containsPolyPointpts, pt, paddingpadding 0多边形包含点内部做凸剖分后逐凸块判定containsCirclePointc, r, pt, paddingpadding 0圆包含点containsCirclePolyc, r, pts, paddingpadding 0圆包含多边形containsCircleRectc, r, rect, paddingpadding 0圆包含矩形当前实现把矩形近似为圆注释标注 Bad implementation且未计入 paddingcontainsRectCirclerect, c, r, paddingpadding 0矩形包含圆按 x/y 两个方向的越界取最大值containsRectsrect1, rect2, paddingpadding 0矩形包含矩形四边越界惩罚的平方和rect均为按 右上、左上、左下、右下 顺序给出的 4 个点distributeHorizontallyshapes, padding, leftToRightpadding 0, leftToRight true要求形状列表中各形状包围盒水平等距leftToRight false时反向分布distributeVerticallyshapes, padding, topToBottompadding 0, topToBottom true垂直等距分布特定约束专用场景函数参数语义disjointIntervalss1, s2均为Line两个共享 y 坐标的一维区间线状形状互不相交基于 1D 重叠判定overlap1D曲线约束多边形链与曲线来自 Curves.ts参数统一为points多边形链顶点列表realNMT与closed是否闭合booleanT函数语义与实现要点isLocallyConvex局部凸性所有相邻边夹角符号一致按平均符号惩罚反向角度isConvex封闭区域凸isLocallyConvex局部惩罚 转向数turning number全局惩罚(\|tn\| - 1)^2isEquilateral所有边等长isEquiangular所有相邻边夹角相等这些约束同时被目标函数isRegular、isEquilateral、isEquiangular复用见下文。目标函数Objective Functions目标函数与约束函数同构区别在于它表达的是希望而非必须优化器在整体能量中加权最小化目标允许不完全满足。参考页同样按 Simple / General / Specific 三组组织。简单目标标量与向量函数参数语义与实现要点minimalx鼓励x尽量小趋近负无穷能量即x本身maximalx鼓励x尽量大能量为-xequalx, y鼓励两值相等(x - y)^2nearVecv1, v2, offset鼓励两向量相距offsetvdistsq(v1, v2) - offset^2greaterThanx, y鼓励x ymax(0, y - x)^2lessThanx, y鼓励x ymax(0, x - y)^2repelPtweight, a, b以权重weight排斥两点weight / (vdistsq(a, b) eps)repelScalarc, d排斥两个标量1 / ((c - d)^2 eps)通用目标任意形状函数参数默认值语义与实现要点inDirectionp, pRef, direction, offset—鼓励点p相对pRef位于direction方向direction无需归一化offset为最短允许距离belowbottom, top, offsetoffset 100鼓励bottom中心在top中心下方方向向量[0,1]abovetop, bottom, offsetoffset 100鼓励top中心在bottom中心上方leftwardsleft, right, offsetoffset 100鼓励left中心在right左侧方向[1,0]rightwardsright, left, offsetoffset 100鼓励right中心在left右侧sameCenters1, s2—鼓励两形状中心重合vdistsq(center1, center2)notTooCloses1, s2, weightweight 10.0排斥两形状线状形状沿线段采样多点排斥其余按中心距离倒数内部固定放大10e6源码注释注明是 HACK需结合权重使用nears1, s2, offsetoffset 10.0鼓励两形状中心相距offsetnearPts1, x, y—鼓励形状s1中心靠近点(x, y)nonDegenerateAngles0, s1, s2, strength, rangestrength 20, range 10把s0–s1–s2三点构成的角推离 0°/180° 退化情形偏离range度以上视为满足below/above/leftwards/rightwards均通过inDirection与固定方向向量实现源码见 Objectives.ts。特定目标标签与正多边形函数参数默认值语义centerLabelAboves1, s2, w—把标签s2矩形居中放置在箭头线s1Line中点上方w为权重centerLabels1, s2, w, paddingpadding 10把标签s2相对形状s1Line 或矩形居中线状时取中点与文本包围盒中心距离减去文本半宽再加 paddingpointLineDistpoint, s1, padding—使点point到线段s1的距离等于paddingisRegularpoints, closed—形状为正多边形isEquilateralisEquiangular之和isEquilateralpoints, closed—所有边等长复用曲线约束isEquiangularpoints, closed—所有角相等复用曲线约束计算函数Computation Functions计算字典compDict是三类函数中数量最多的一类Functions.ts 共 8000 行。它们都是纯函数返回Valuead.Num类型的值可自由组合。按其用途可分为以下几组。颜色构造函数参数返回说明rgbar, g, b, a均为unitT即[0,1]区间Color构造 RGBA 颜色hsvah[0,360)、s[0,100]、v[0,100]、aColor构造 HSVA 颜色none—Color无填充/描边NONEpaintselectColorcolor1, color2, levelColor按level的奇偶在两色间切换仅支持 RGBAsetOpacity—Color设置透明度列表、向量与点集运算get(xs, i)取浮点列表xs的第i个元素i为natT0 起始oneBasedElement(points, i)1 起始索引取点列表元素i为posIntTsum(xs)、sumVectors(vecs)、maxList(xs)、minList(xs)、count(xs)列表聚合dot(v, w)向量点积average2/average多点平均unit(v)向量归一化firstPoint/lastPoint/averagePoint路径点取首/尾/均值数学函数可微版本参考页收录的数学计算函数全部基于自动微分原语AutodiffFunctions.ts实现包括acos、acosh、asin、asinh、atan、atan2、atanh、cbrt、ceil、cos、cosh、exp、expm1、floor、log自然对数、log2、log10、log1p、pow、round、sign、sin、sinh、tan、tanh、trunc、mod(a, n)用a - n*floor(a/n)实现因为自动微分缺少取模原语、sqr、sqrt、max、min、abs、toRadians、toDegrees、norm、normsq、vdist、vmul、vdistsq、angleOf、angleBetween、angleFrom、cross2D、cross3D 叉积、常量MathE、MathPI、rot90二维旋转 90°、rotateBy(theta)。这类函数让 Style 可以直接书写任意可微表达式从而把复杂的数值关系纳入优化。矩阵与变换含 2D/3D 投影管线矩阵组直接支撑fake-3d-linear-algebra、ray-tracing、solids等示例的 3D 投影能力构造与代数identity(n)、diagonal(v)、trace(A)、determinant(A)支持 2×2、3×3、4×4、inverse(A)不可逆时可能返回含INF/NaN的数值无效结果、outerProduct(u, v)、crossProductMatrix(v)由 3 向量构造反对称矩阵使A u v × u2D 仿射变换齐次 3×3 矩阵matrix(a, b, c, d, e, f)镜像 SVG/CSSmatrix、rotate(theta, x?, y?)绕点旋转默认原点、scale(sx, sy)、skew(ax, ay?)、translate(x, y?)对应的线性 2×2 版本rotate2d、scale2d、skew2d不能与仿射变换直接复合3D 变换rotate3d(theta, v)Rodrigues 公式、rotate3dh(theta, v)4×4 齐次版、scale3d、scale3dh、translate3dh、matrix3d(...)16 参数镜像 CSSmatrix3d、shear(u, v)及shear2d/shear3d投影与视口lookAt(eye, center, up)视图矩阵、perspective(fovy, aspect, zNear?, zFar?)默认zNear 0.1、zFar 100.0、ortho(left, right, bottom, top, zNear?, zFar?)、project(p, model, proj, view)3D 坐标投影到 2D 窗口坐标、projectDepth、projectList、matrixMultiplyList、fromHomogeneous/toHomogeneous/toHomogeneousMatrix齐次坐标转换路径构造与标记通用路径makePath(start, end, curveHeight, padding)构造带控制点的二次贝塞尔曲线路径控制点位于起点终点连线中点并向法向偏移curveHeight首尾按padding让开文字、pathFromPoints、quadraticCurveFromPoints、interpolateQuadraticFromPoints、cubicCurveFromPoints、connectPaths、concatenatePaths、joinPaths曲线与弧arc(pathType, start, end, [width, height], rotation, largeArc, arcSweep)、circularArc、repeatedArcs、wedge、interpolatingSpline(points, tension)、Penrose(center, radius, holeSize, angle, nSides, chirality)Penrose 地砖标记与刻线unitMark、unitMark2、chevron、ticksOnLine(spacing, numTicks, tickLength)、orientedSquare(len, intersection)、triangle、midpoint、midpointOffset、innerPointOffset、ptOnLine(p1, p2, r)、arcSweepFlag([x1, y1], [x2, y2], rotation, largeArc)、lineLineIntersection随机采样random/unitRandom/diskRandom/circleRandom/sphereRandom/normalRandom/triangleRandom/randomIndexsampleColor随机颜色这些函数依赖形状采样器Context见 Samplers.ts随机数在采样阶段固化参考页 random-sampling.md 说明了随机常量在优化中保持不变的行为。几何查询与形状距离三角形几何barycenter、circumcenter、circumradius、incenter、inradius有符号距离函数SDFsignedDistance(s)、signedDistanceRect、signedDistanceCircle、signedDistancePolygon、signedDistanceEllipse、signedDistanceLine、signedDistancePolyline、signedDistanceGroup射线相交rayIntersect(S, r)及rayIntersectDistance的系列变体rayIntersectCircle、rayIntersectEllipse、rayIntersectLine、rayIntersectRect、rayIntersectPoly、rayIntersectGroup以及对应的rayIntersectNormal*系列返回交点法向最近点与轮廓点closestPoint(s, p)系列closestPointCircle、closestPointRect、closestPointLine、closestPointEllipse、closestPointPoly、closestPointGroup、closestSilhouettePoint(s, p)系列、closestSilhouetteDistance形状距离rectLineDist、shapeDistance及类型化变体shapeDistanceCircles、shapeDistanceRects、shapeDistanceRectLine、shapeDistanceRectlikePolyline、shapeDistancePolys、shapeDistanceRectCircle、shapeDistancePolyEllipse、shapeDistanceCircleLine、shapeDistanceLines——它们是overlapping/disjoint/touching约束的底层支撑曲线能量signedArea、turningNumber、perimeter、isoperimetricRatio、elasticEnergy、pElasticEnergy、inflectionEnergy、totalCurvature、lengthK(points, closed, k)、maxCurvature、curvatures、tangentVectors、normalVectors、binormalVectors、evoluteCurve、offsetCurve(magnitude)、centerOfMass、tsneEnergy(points, projectedPoints)其他工具noClip/clipGroup 裁剪数据bboxPts/rectPts包围盒角点TeXify文本转 TeXrepeat序列复制diffusionProcess扩散过程模拟函数签名的默认值与类型约束参考页每个函数条目都渲染一张参数表列Name / Type / Type Description / Description / Default Value与返回类型说明其数据源即三个字典中的params与returns字段。使用时可重点注意以下默认值约定大部分padding/overlap参数默认为0方位类目标below/above/leftwards/rightwards的offset默认为100near的offset与notTooClose的weight默认为10.0nonDegenerateAngle的strength/range默认为20/10centerLabel的padding默认为10rotate/translate/skew的坐标参数x, y默认为0perspective/ortho的zNear/zFar默认为0.1/100.0。从源码结构看参考页的返回类型如Real、Real2、RealNM、Color、PathData等由describeType生成对应的运行时值类别见 value-types.md。需要提醒的是Penrose 的类型并非严格强制仅当值用作形状参数时才做严格校验见 shapes-overview.md。参考页本身的生成机制与验证途径本参考页 functions.md 并非手写列表而是 Vue 数据驱动页面它通过 functions.data.ts 从penrose/core直接导入compDict、constrDict、objDict用markdown-itmarkdown-it-katex渲染每个函数的 Markdown/LaTeX 描述再由 Function.vue 渲染参数表格。这意味着文档内容与源码字典天然保持同步——新增函数只需要在字典中登记即可自动出现在参考页中。如果要在仓库中验证或加深理解最直接的途径是阅读约束实现与注册Constraints.ts、曲线约束 Curves.ts目标实现与注册Objectives.ts计算实现与注册Functions.ts编译器分发Style.tsCompApp/ConstrFn/ObjFn三个分支函数类型定义functions.ts测试用例Constraints.test.ts、Objectives.test.ts、Functions.test.ts、Queries.test.ts、SDF.test.ts这些测试覆盖了overlapping、disjoint、contains、inDirection、near、射线相交与 SDF 等关键函数在不同形状组合下的数值行为。综上Penrose Style 的函数体系是一套约束能量 优化目标 可微计算三位一体的内建 DSL 函数库约束与目标函数驱动布局优化计算函数则在形状属性与中间量之间架起桥梁。对照本文的完整清单与源码路径你可以在 Style 程序中直接选用合适的函数并借助仓库中的测试示例确认其行为边界。赞分享开发工具数据可视化【免费下载链接】penroseCreate beautiful diagrams just by typing notation in plain text.项目地址https://gitcode.com/gh_mirrors/pe/penrose点击查看免费下载相关推荐Penrose 词云示例实战用 Style 约束与目标函数排版文本标签Penrose 词云示例实战用 Style 约束与目标函数排版文本标签 本指南以仓库中 word cloud 示例 https://link.gitcode.开发工具数据可视化open_clip API完全参考函数与参数详解open_clip API完全参考函数与参数详解 1. 核心模型构建接口 1.1 create_model模型实例化主入口 python def creat人工智能深度学习多模态预训练计算机视觉NLP基础模型Obsidian Dataview 函数参考DQL 函数语法、向量化与全部内置函数实战详解Obsidian Dataview 函数参考DQL 函数语法、向量化与全部内置函数实战详解 Dataview 函数是 DQLDataview Query L前端知识管理数据分析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Webiny 代码风格指南:禁止把 Container 当作 Service Locator(依赖注入最佳实践) 2026/9/28 20:17:26

Webiny 代码风格指南:禁止把 Container 当作 Service Locator(依赖注入最佳实践)

CMS后端前端 【免费下载链接】webiny-js Open-source, self-hosted CMS platform on AWS serverless (Lambda, DynamoDB, S3). TypeScript framework with multi-tenancy, lifecycle hooks, GraphQL API, and AI-assisted development via MCP server. Built for developers at…

阅读更多 →
TestSprite轮询与重试机制源码解析:长轮询、指数退避与限流时间预算如何实现 2026/9/28 20:17:26

TestSprite轮询与重试机制源码解析:长轮询、指数退避与限流时间预算如何实现

TestSprite轮询与重试机制源码解析:长轮询、指数退避与限流时间预算如何实现 【免费下载链接】testsprite-cli Official TestSprite CLI — AI-powered automated testing from your terminal 项目地址: https://gitcode.com/gh_mirrors/te/testsprite-cli T…

阅读更多 →
成对比较中被忽略的暗坑:LLM-as-a-Verifier如何用环形赛制彻底消除验证器位置偏差 2026/9/28 20:17:26

成对比较中被忽略的暗坑:LLM-as-a-Verifier如何用环形赛制彻底消除验证器位置偏差

成对比较中被忽略的暗坑:LLM-as-a-Verifier如何用环形赛制彻底消除验证器位置偏差 【免费下载链接】llm-as-a-verifier LLM-as-a-Verifier is a general-purpose framework that provides fine-grained feedback for any agent without requiring additional traini…

阅读更多 →
论文降重别急着点处理:书霸避坑指南 2026/9/28 20:17:26

论文降重别急着点处理:书霸避坑指南

论文查重或AIGC检测结果出来后,很多人第一反应是“赶紧降下来”。但降重不是简单替换几个词,降AIGC也不是把句子改得越不像机器越好。书霸(SHUBA WRITING)的“降重/降AIGC”页面,将处理流程分为选择类型、上传文件、付…

阅读更多 →
牛只检测与识别数据集 | 牛只检测 个体识别 智慧畜牧 自监督学习9118期 2026/9/28 20:17:25

牛只检测与识别数据集 | 牛只检测 个体识别 智慧畜牧 自监督学习9118期

牛只检测与识别数据集 | 牛只检测 个体识别 智慧畜牧 自监督学习9118期 数据集概述 本数据集专注于牛只个体的检测、定位与身份识别,服务于智慧畜牧、牲畜档案管理及行为研究。数据采集自英国布里斯托大学农场,涵盖荷斯坦-弗里生奶牛的俯视影像&#xf…

阅读更多 →
tick-stock-panel连板梯队页功能拆解:模式切换、卡片信息、五档盘口修正与板块穿透 2026/9/28 20:17:06

tick-stock-panel连板梯队页功能拆解:模式切换、卡片信息、五档盘口修正与板块穿透

tick-stock-panel连板梯队页功能拆解:模式切换、卡片信息、五档盘口修正与板块穿透 【免费下载链接】tick-stock-panel TSP自托管、零运维的 A 股「选股 监控 回测」量化工作台 | LLM能力驱使策略定制个股分析复盘 | 自由接入第三方数据源与个性化扩展数据 | 个人…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉