几何运算符的实现
最一般形式的几何运算符需要一些参数以及一些几何对象作为输入以构造一个或多个输出对象。
上述公式中的参数包括连续参数,就像自由点的位置或圆上点的角度,以及离散参数,例如从有限集合中选择一个元素。在下文中,术语“参数”通常仅指连续参数。
几何元素是几何操作符的实例。它将运算符绑定到一组参数和特定的输入元素。几何元素埃尔
可以包含多条信息:
- 当前位置。这通常存储在
埃尔·霍姆格
.不同的元素将使用它作为输入。
- 索引
埃尔州Idx
到状态数组中。在指定位置,元件可以存储信息关于其连续参数以及使用的数据以便于连续追踪离散选择。
- A参数
el.参数
:我们得看看是否还需要这个。
- 参数列表,用于标识此参数所依赖的元素。
- 描述元素初始位置的一些成员。
- 控制外观的各种属性,在这里不相关。
几何运算符具有对这些值进行操作的函数。以下部分描述了函数和其他属性每个几何操作符都可以定义。
在下面的文本中,有一些术语通常具有重叠含义,但在这种情况下具有非常具体的含义,所以这些术语需要定义。
这个位置元素的当前位置。请参阅有关友善的
该位置的存储位置以及关于更新位置
计算方法。位置是操作的输出。
这个状态元素是用来提供连续性的东西。这只与多值操作有关或自由和半自由元素。这个埃尔州Idx
用作状态输入
相应的。stateOut(状态输出)
阵列以便于以只读方式访问以前的状态以及对新更新状态的只读访问。
因此,状态是浮点数的子数组它们被认为是构成复数的对。这种解释是相关的,因为,几乎是真实的数字将变得完全真实。
这个参数用于在跟踪时构造插值路径。通常这将是一个向量或矩阵可以对其执行线性插值(沿复杂迂回)。可以根据状态重建参数。
kind=字符串›
描述此操作结果的对象类型的短字符串。可能的值包括:
P(P)
–点
L(左)
–线路
秒
–细分市场
C类
–圆锥曲线(包括圆)
*秒
–一套*
(例如。Ps公司
对于多个点)
Tr公司
–转型
点、线和线段类对象将其结果存储在埃尔·霍姆格
.段还包含el.startpos公司
,el.endpos公司
和el.farpoint点
,但这可能会改变。圆锥曲线描述为el.矩阵
,以及转换。对象集表示为el.结果
.
签名=[字符串›]
虽然这还没有实现,但应该有一个未来的版本其中,此属性用于描述数字和类型允许的输入元件。
isMovable=布尔›
默认为的布尔属性假
.如果设置为真的
,则所讨论的元素至少是半自由的,因此,它由至少一个连续参数来描述。这类元素可以通过用户交互或脚本进行移动。
stateSize=整数›
默认为零的数值属性。这是保留的浮点数在作为此运算符实例的每个元素的状态数组中。因此,允许的状态变量范围为埃尔州Idx
到el.stateIdx+操作状态大小
独占。由于状态有时被解释为复数数组,此状态大小通常应为偶数,等于描述状态的复杂变量数量的两倍。
初始化(el)
如果存在此函数,则每个元素都只调用一次,当元素首次包含在几何配置中时。它可以计算元素的初始参数来自描述元素的对象的任意属性。在执行此函数时,前面的所有元素都将被初始化并更新了它们的位置。
这个初始化
函数可以写入输出状态。当更新位置
函数首次运行。全球旗帜跟踪初始
到时候会是真的初始化
被调用。如果它确实写入状态数组,那么它可能希望将该标志设置为假
使得更新位置
已经使用跟踪来匹配结果,而不是简单地以任意顺序返回结果。
提供所需的新位置(通过鼠标输入或某些脚本中的某些赋值)此函数计算相应的参数向量以表示要么是那个位置,要么是(在某种意义上)最近的状态在半自由单元的约束下。返回的参数可以用作某些插值路径的终点。计算可以考虑输入元素的当前位置。
这个类型
字段可以用来描述我们正在处理的输入类型。type===“鼠标”
表示用户交互,而type===“homog”
描述对“homog”
元素的字段。可以根据需要引入其他类型,但应努力保持不同病例数低。例如,应该没有“xy”
类型,因为设置笛卡尔坐标可以通过设置齐次坐标来建模。
当输入为“鼠标”
,则该位置表示当前鼠标位置,表示为同质坐标,并且已经包括到原始点位置的偏移这是从鼠标向下时记住的。
从状态获取参数(el)
从当前输入状态读取状态输入
,此函数返回与该状态相对应的参数。返回的参数可以用作某些插值路径的起点。返回的结果不应依赖于任何输入元素的当前位置。
将参数输入到状态(el,param)
将给定的参数值写入状态stateOut(状态输出)
.该函数沿插值路径调用,调整正在移动的元素的位置。
参数路径(el、tr、tc、src、dst)
沿插值路径计算参数。如果没有,将使用默认实现,它执行一个半圆形的复杂迂回。信托收据
是实际参数,范围为-1…1。总胆固醇
是在地震圆上生成的复杂参数。要么信托收据
或总胆固醇
可用于计算备用路径。型钢混凝土
和数据传输系统
是路径端点处的参数。返回的值应该是这些值之间的线性插值。
更新位置(el,isMover)
每个几何运算符都必须实现此功能。它将重新计算结果元素的位置基于参数元素和当前参数。
对于具有状态的元素,更新位置
应该写入所有状态变量,通常在考虑到之前的状态之后。即使新状态应该与旧状态相同,这应该通过复制值来明确。
这个是移动器
参数将是真的
如果当前元素是一个正在积极移动的人,以及假
如果只是更新以响应其参数之一更改位置。