- 此框架默认不实现空间坐标的功能,需要后续类实现。
-
- 链路接触点用于定义多个物体间的链路结构
-
-
- 注意:这里假定点一定在线的某一端上,所以并不会检查是否相连
-
-
- 注意:这里假定点一定在线的某一端上,所以并不会检查是否相连
-
-
- 元素中不定义点或法向,后续通过接口实现,目的是为了区分所有的元素。
- 放置元素中需要实现与工具类相关的内容
-
-
- 这是主线程方法,可以在此进行主要的数据交换操作
-
-
- 这是主线程方法,可以在此进行主要的数据交换操作
-
-
- 这是主线程方法,可以在此进行主要的数据交换操作
-
-
- 这是主线程操作
-
-
- 这是异步操作
-
-
- 这是主线程操作
-
-
- 此框架使用2维计算器,但自身并不保存线的参数。
-
- 需要后续类通过SetRenderer额外指定一个渲染器;
- 且能够传递计算所需的参数,并调用UpdateRender完成渲染更新。
-
-
- 1r ≈ 1unity
- 注意这是约等于,所以其实不算准确。
-
-
- 默认只支持等宽线绘制。
-
-
- 其中LinkedData应该指向实现此接口类本地上的一个实现ICoterminous的实例字段
-
-
- 对目标结构使用Add,与Remove可以添加链接关系
- 通常,具有链接关系的成员都会互相关联,所以可以使用Polarity方式进行添加与移除。
- 链接关系管理允许像链表一样遍历与维护对象,且不用在乎其中的成员类型。
- 另外链接的具体实现与当前成员的特性有关,需要根据具体成员特性进行使用
-
-
- 返回的是所有有效的成员数量
-
-
- 只改变在结构中保存的命令结构方向,不改变数据
-
-
- 用于无法自主绘制对象提供的被动绘制方法。
-
-
- 所有包含轨迹计算的可放置对象都应该实现此接口,如果是建筑物可以实现另类的渲染器结构。
- 一个可放置对象拥有轨迹接口将代表其拥有轨迹计算的一切必备条件。
-
- 注意,其中的三维空间是转为平面向上,二维则是标准xy竖直平面进行变换,两者都会根据当前的物体位置进行变换。
-
-
- 首先发生的反序列化事件,用于反序列化全局索引,以及一些没有依赖引用关系的参数
-
-
- 比如将引用关系放在滞后反序列化中进行构建,此时全局索引已经构建,所以可以不用考虑目标是否还在序列化等问题。
-
-
- 注意:这是本地空间
- 另外有些时候在计算的最后不满两步长的点可能会被省略。
-
-
- 注意:此项主要用于设置坐标偏移,是本地空间
- 并且它的坐标可能并不是真的是中心点。
-
-
- 注意:这是模拟空间,世界或本地旋转对此无效
-
-
- 注意:这是模拟空间,世界或本地旋转对此无效
-
-
- 注意:这是模拟空间
-
-
- 注意:这是模拟空间
-
-
- 注意:这是模拟空间,世界或本地缩放对此无效
-
-
- 注意:这是模拟空间,世界或本地缩放对此无效
-
-
- 注意:这是模拟空间,世界或本地缩放对此无效
-
-
- 注意:这是模拟空间,世界或本地缩放对此无效
-
-
- 注意:这是模拟空间,不能与世界空间坐标混用
-
-
- 说明:
- 决策者工具是一种通过输入产生操作的代理工具,所有的操作应该通过决策者工具类代为实现。
- 决策者工具可以在特定的条件下接受来自不同情景的输入(快捷键,或常规操作),
- 切换这个决策者工具即可完成对一系列操作的情景快速切换,
- 其中包含一系列操作栈,可以同时操作数个对象。
-
- 通常情况下只能有一个决策者工具在线,这将会占用静态名额;
- 其他启动的决策者工具会关闭当前激活的决策者。
- 不论工具是否启用,都可以调用updateDMTool(),这会自动路由到所需的工具上。
-
- 注意:
- 工具内异步更新将按顺序执行,这十分缓慢,很可能会因为无法准时完成任务延迟多帧。
- 异步期间无法访问所有的的运行时参数,需要另外为异步创建所需的备份,注意不要给GC带来过大的压力。
-
-
- 如果直接遍历所有按键,将有2ms的GC,并不高效;
- 这也是为什么需要先申请一个按键
-
-
- 如果直接遍历所有按键,将有2ms的GC,并不高效;
- 这也是为什么需要先申请一个按键
-
-
- 包装一个按键事件
-
-
- 注意:这会带来更大的开销
-
-
- 注意:这会带来更大的开销
-
-
- 开启后会大大降低占用空间,但会使输出不再具有可读性,并带来一定的性能问题。
- 默认开启。
-
-
- 每个工具中包含一系列的操作栈列,启用工具将直接执行这些操作。
- 当工具中的操作栈全部结束时,工具将会自动关闭。
- 监听工具的开始与结束委托来快速跟踪工具状态。
-
-
- 基类必须继承,用以实现栈批处理更新
-
-
- 基类必须继承,用以实现栈批处理更新
-
-
- 不建议在后台执行按键操作等关键操作,而是应该将主要逻辑放在当前激活的工具上。
-
-
- 不建议在后台执行按键操作等关键操作,而是应该将主要逻辑放在当前激活的工具上。
-
-
- 基类必须继承,提供必要的结束回调
-
-
- 对于过程来说_enableTool是常量,可以检查,不能写入
-
-
- 对于过程来说_enableTool是常量,可以检查,不能写入
-
-
- 只能在工具序列化处理阶段中调用
-
-
- 在序列化方法中可以使用:
- SerializeTemp作为序列化的缓冲区;
- TypeConsignMap作为目标类标识的映射管理;
-
- 可以使用 SerializeTemp.Add 来添加新的元素,以将其纳入序列化范围;
- 并在所有元素添加结束后调用 SerializeTemp.RefreshSerializedContext() 来刷新缓存。
- 如果不刷新缓存会导致所有序列化的内容清零。
-
-
- 在反序列化方法中可以使用:
- SerializeTemp作为序列化内容的获取;
- TypeConsignMap作为目标类标识的映射获取;
-
-
- 请在ToolSerializeDispost方法中基类方法之后调用
-
-
- 请在ToolDiserializDispost方法中基类方法之后调用
-
-
- 创建成员的连带功能:
- * 创建时加入建造队列。
- * 名称是自动按照当前的时间序列给定,全局唯一。
-
-
- 轨迹跟踪可以计算出一个受路径影响的光标,用于路径上吸附。
-
- 注意:这是一个后台工具,不需要置于前台
-
-
- 结果会放在类字段:
- 吸附坐标:_trackingCurrentPosition
- 吸附对象: _trackingCurrentTarget
-
-
- 返回一个追踪计算器,这会和其他计算器同时计算,但返回关注点不同的结果
- 注意:这会带来额外的性能开销。
-
-
- 注意,请注意保留至少一个计算器在工具内,全部删除可能导致获取默认值时抛出异常
-
-
- 如果不想要进行射线检测,那么在此处提供必要的属性即可创建一个满足要求的射线检测结果。
- (注意:潜在的较大开销方法)
-
-
- 默认开启了输入控制,可以通过EnableInputHelper字段来设定是否启用。
-
- 在没有任何工具启动的情况下,管理器可以接收按键输入,直到被工具输入抢占。
- 不过这里并没有抢占逻辑,所以请根据工具激活的逻辑适时关闭按键处理
-
- 使用前须知:
- 代理生命周期元素需要通过AddEmbedded加入;同时默认关闭主要的更新过程,需要设置EnableUpdate为true;
-
-
- 加入的成员可以享受序列化与反序列化服务,以及后续的一系列管理方法
-
-
- 移除的成员将无法继续享受序列化服务
-
-
- 注意:这并不意味着点A和点B的顺序是沿当前表示的顺时针的方向排列的,
-
-
- 这是一个模拟双稳态的行为节点,
- 通过初始化其中上一步和下一步将要执行的节点目标
-
-
- 操作栈是一个操作行为树,其中遍布插槽,插槽中包含具体行为,并定义了状态转换的过程。
- 操作栈(行为树) -> 操作插槽 -> 行为 -> 状态切换
-
- 你可以通过在工具类上调用GenerateOperateSlot来创建一个指定类的插槽,
- 切换状态时可以直接new一个新的派生自OperateSlot的类,通过ReplaceThis来切换状态,而不会改变其中的目标成员。
-
-
- 在这里进行主要的逻辑切换,使用ReplaceThis(newSlot)来切换流程;
- 注意不要进行复杂的操作,减少日志打印的调用。
-
-
- 可以用于数组标识,其中的id在运行期间不会改变。
- 如果要移除对象,记得先使用Invalidation无效化索引。
-
-
- 注意:遍历是有限的,你不能无限遍历一个循环链路,
- 线路的遍历应该抽象给行为树,由行为树节点在有限的空间中进行遍历。
-
-
- 遍历的行为需要在循环体内定义,需要对每次循环提供的回调器设定下一步的目标。
- 如果没有设定目标,或目标未变更,那么再次遍历时,循环将自动退出。
-
- 注意:遍历是有限的,你不能无限遍历一个循环链路,
- 线路的遍历应该抽象给行为树,由行为树节点在有限的空间中进行遍历。
-
-
- 可以与 LinkedPortType 直接相转换
-
-
- 可以与 LinkType 直接相转换
-
-
- 路径点集是一个世界中用于参考的点的集合。
-
-
- 给定执行流程,在随后的stepRun中被按阶段执行。
- 可以调用end方法在运行过程中结束事件。
-
-
- 步骤序列器中包含多个委托构成的步骤,每个步骤都将循环执行,
- 通过序列器中预设的方法来控制流程方向。
-
-
- Complex32 x = new Complex32(1f,2f);
- Complex32 y = Complex32.FromPolarCoordinates(1f, Math.Pi);
- Complex32 z = (x + y) / (x - y);
-
-
- // a, b of type Complex32
- a.Conjugate = b;
-
- is equivalent to
-
- // a, b of type Complex32
- a = b.Conjugate
-
-
- long x,y,d;
- d = Fn.GreatestCommonDivisor(45,18,out x, out y);
- -> d == 9 && x == 1 && y == -2
-
- The
- long x,y,d;
- d = Fn.GreatestCommonDivisor(45,18,out x, out y);
- -> d == 9 && x == 1 && y == -2
-
- The - 1, 2, 3 - 4, 5, 6 will be returned as 1, 4, 7, 2, 5, 8, 3, 6, 9 - 7, 8, 9 -
- 1, 2, 3 - 4, 5, 6 will be returned as 1, 2, 3, 4, 5, 6, 7, 8, 9 - 7, 8, 9 -
- 1, 2, 3 - 4, 5, 6 will be returned as 1, 4, 7, 2, 5, 8, 3, 6, 9 - 7, 8, 9 -
- 1, 2, 3 - 4, 5, 6 will be returned as 1, 2, 3, 4, 5, 6, 7, 8, 9 - 7, 8, 9 -
Xn = a * Xn−3 + c mod 2^32
- http://www.jstatsoft.org/v08/i14/paper
- x -> exp(x)-1
- exp(power)-1.x -> exp(x)-1
- exp(power)-1.(a,b) -> sqrt(a^2 + b^2)
- sqrt(a2 + b2) without underflow/overflow.(a,b) -> sqrt(a^2 + b^2)
- sqrt(a2 + b2) without underflow/overflow.(a,b) -> sqrt(a^2 + b^2)
- sqrt(a2 + b2) without underflow/overflow.(a,b) -> sqrt(a^2 + b^2)
- sqrt(a2 + b2) without underflow/overflow.- N-1 - - ' - y = > coef[i] T (x/2) - - i - i=0 -- Coefficients are stored in reverse order, i.e. the zero - order term is last in the array. Note N is the number of - coefficients, not the order. - - If coefficients are for the interval a to b, x must - have been transformed to x -> 2(2x - b - a)/(b-a) before - entering the routine. This maps x from (a, b) to (-1, 1), - over which the Chebyshev polynomials are defined. - - If the coefficients are for the inverted interval, in - which (a, b) is mapped to (1/b, 1/a), the transformation - required is x -> 2(2ab/x - b - a)/(b-a). If b is infinity, - this becomes x -> 4a/x - 1. - - SPEED: - - Taking advantage of the recurrence properties of the - Chebyshev polynomials, the routine requires one more - addition per loop than evaluating a nested polynomial of - the same degree. -