尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

TiXL 中 Log 算子详解:基于 Math.Log(x, y) 的对数运算节点

TiXL 中 Log 算子详解:基于 Math.Log(x, y) 的对数运算节点 TiXL 中 Log 算子详解基于 Math.Log(x, y) 的对数运算节点【免费下载链接】t3TiXL is an open source software to create realtime motion graphics.项目地址: https://gitcode.com/GitHub_Trending/t3/t3导读本文聚焦 TiXL 实时动态图形软件中 Lib.numbers.float.basic 算子库的Log对数节点完整讲解其输入/输出参数、底层 C# 实现Math.Log(x, y)、节点图内的求值流程与典型应用场景。读完本文你将掌握如何在 TiXL 节点图中以任意底数计算对数、正确设置 Value 与 Base 参数并理解该算子与 Pow幂算子互为逆运算的内在联系。算子概览一句定位Log 算子计算“以指定 Base 为底、Value 的对数值”。用数学语言描述Result log_base(Value)在 C# 中等价于 Log.cs 中的一行调用Result.Value (float)Math.Log(v, newBase);该算子属于Lib.numbers.float.basic基础浮点运算族与 Add、Sub、Multiply、Div、Pow 等节点并列负责将数学中的对数函数引入可视化编程环境。输入参数与输出原文档给出的完整接口定义如下本文结合 Log.t3 配置文件补充了默认值信息。输入参数名称相关性 类型说明默认值来自 Log.t3ValueSingle底数语义下的“结果值”即对数值的反函数输入——它定义的是“某个数经过幂运算后得到的结果”真数 x1.0BaseSingle底数定义“幂运算时使用的底”底数 b1.0两个输入均为Single即 C# 中的float32 位单精度浮点数。请注意Log.t3 中二者的默认值都是1.0若直接使用默认值Math.Log(1.0, 1.0)在数学上是未定义情形实际会产生NaN详见下文“数学边界”因此在正式使用前务必为两个输入接入数值或动画曲线。输出名称类型ResultSystem.Single输出类型为System.Singlefloat可直接连接到其他浮点输入或作为后续运算节点如 Multiply、Div的输入继续参与计算。源码级实现剖析节点类骨架Log.cs 的完整实现非常简洁它继承自泛型单例基类InstanceLognamespace Lib.numbers.float.basic; [Guid(ffbf3237-8f31-4d19-bc21-88f792a7df3e)] internal sealed class Log : InstanceLog { [Output(Guid 37256f00-8f0e-4252-928e-4e9264cbd9df)] public readonly Slotfloat Result new(); public Log() { Result.UpdateAction Update; } private void Update(EvaluationContext context) { var v Value.GetValue(context); var newBase Base.GetValue(context); Result.Value (float)Math.Log(v, newBase); } [Input(Guid d3a0a2fd-e108-4636-a375-092701d58e19)] public readonly InputSlotfloat Value new(); [Input(Guid 328f7f75-0414-40f9-ba21-8313838a8bd5)] public readonly InputSlotfloat Base new(); }几个值得注意的实现细节GUID 标识类、两个输入、一个输出分别拥有独立 GUIDffbf3237-…、d3a0a2fd-…、328f7f75-…、37256f00-…。这些 GUID 同时出现在 Log.t3 与 Log.t3ui 中是 TiXL 将符号定义.t3、界面布局.t3ui与运行时代码.cs三方关联的“主键”。求值入口构造函数中通过Result.UpdateAction Update注册更新回调。每当该节点的 Result 被下游节点请求且需要重算时Update方法被调用。取值方式Value.GetValue(context)与Base.GetValue(context)会沿着节点图递归拉取上游输入的最新值详情见下文“求值流程”。类型转换Math.Log(double, double)返回double此处显式强转为float后写入Result槽。定义与界面文件Log.t3符号的运行时定义记录了FormatVersion: 3、算子 Id、两个输入的 Id 与默认值均为1.0当前无子节点Children: []与连接Connections: []。Log.t3ui编辑器的界面布局包含输入/输出的屏幕坐标、节点描述与文档一致以及Value 输入的 UI 范围Min: -100.0, Max: 100.0——这意味着在默认界面中直接拖动 Value 输入旋钮时数值被限制在[-100, 100]区间若需要更大范围或负值以外的取值可通过外部连接或数值输入框突破该 UI 限制。Base 输入未设置 Min/Max。节点图求值流程Log 算子的求值遵循 TiXL 标准的“拉取式pull-based”求值模型下游节点如显示、颜色映射等请求 Log 的Result输出值Result.UpdateAction即Update方法被触发并通过DirtyFlag机制判断是否需要重算InputSlot.cs 中的脏标记逻辑 可见IsDirty与SetVisited等基础设施Update内部调用Value.GetValue(context)与Base.GetValue(context)沿上游连接递归求值得到两个float后调用Math.Log(v, newBase)结果写入Result.Value。因此只要 Value 或 Base 任一输入所连接的动画曲线、时间表达式或上游算子发生变化Log 的输出都会自动随之更新非常适合在参数调制链路中实时驱动视觉参数。数学行为与典型应用对数恒等式设Result log_base(Value)等价关系为Base ^ Result Value常见特例无需额外算子直接通过设置 Base 实现期望的对数Base 取值对应 C# 写法自然对数 ln(x)Math.E ≈ 2.7182818Math.Log(x)常用对数 log₁₀(x)10Math.Log10(x)以 2 为底 log₂(x)2Math.Log(x, 2)与 Pow 算子互为逆运算Pow.cs 实现的是Result Value ^ ExponentMath.Pow(v, pow)。数学上Pow(x, n) y ⇔ Log(y, x) n例如对某个参数做幂次映射后用 Log 还原可实现曲线映射的往返调试在 Lib.numbers.float.basic 算子族中Pow 与 Log 常配合使用构成“指数化–对数化”的参数整形组合。边界与注意事项由于底层直接调用 .NET 的Math.Log(double a, double b)以下数学约束会直接影响输出使用时务必注意真数域Value ≤ 0时结果为NaN负数无实数对数0 的对数为负无穷。底数域Base必须大于 0 且不等于 1否则结果为NaN或未定义。默认值Base 1.0恰好落入未定义情形这正是节点默认输出为NaN的原因。底数大于 1 时Value在(0, 1)区间输出负值Value 1输出正值Value 1输出0。底数小于 1 时函数单调性反转Value越大对数值越小。计算在double精度下进行后强转为float对极高精度的中间结果会有正常的单精度舍入。在实际工程中Log 算子最常见的用法包括音频分贝dB映射、感知均匀的亮度/音量参数调整、对指数增长的数据做线性化压缩以及在 Lib.numbers.float.basic 提供的其他浮点运算算子如 Multiply、Div、Sum之间串联以构造非线性调制曲线。实战速查在节点图中放置 Log 算子从算子库Lib → numbers → float → basic → Log拖入图编辑器。接入 Value把需要求对数的浮点信号常量、动画曲线输出或其他算子的结果连到Value输入。默认 UI 旋钮范围为[-100, 100]见 Log.t3ui务必保证传入值为正数。设置 Base连接一个常量或表达式来指定底数常用取值Math.E、10、2见上表。避免使用1或非正值。读取 Result将ResultSystem.Single连接到任意浮点参数实时驱动画面。关联资源算子官方文档Log.md本文依据算子库索引Lib.numbers.float.basic README运行时实现Log.cs符号定义Log.t3界面布局Log.t3ui逆运算节点Pow.cs输入槽基础设施InputSlot.cs【免费下载链接】t3TiXL is an open source software to create realtime motion graphics.项目地址: https://gitcode.com/GitHub_Trending/t3/t3创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表