注意:以下翻译的准确性尚未经过验证。这是使用 AIP ↗ 从原始英文文本进行的机器翻译。

公式语法

Quiver允许您绘制自定义数学表达式并使用公式指定筛选条件。我们在公式中支持以下结构:

  • 数字: 除了标准数字如63.14159-128外,Quiver还支持科学计数法:1.602e-19
  • 绘图引用: 每个绘图在创建时被指派一个参数名称,您可以使用$符号引用绘图:$A指代参数名称为A的绘图,$A + $B计算两个绘图的和。
  • 布尔值: 使用布尔值truefalse进行逻辑运算。
  • 时间引用: 使用secondsSince("time")millisecondsSince("time")函数在公式中引用时间。时间需要采用ISO-8601格式 ↗。例如,secondsSince("1970-01-01T00:00:00+00:00")表示从1970年1月1日(UTC)起的秒数。
  • NaN: 表示未定义或不可表示的值,如空值。

运算符

  • 数值运算符: Quiver支持+-*/和余数运算符%10 % 7计算结果为3。您还可以使用括号()来强制优先级。这些运算符生成双精度数字作为结果。
    • 您不能使用^进行幂运算。请参见下面内置函数中的pow函数进行幂运算。
  • 比较运算符: Quiver支持==用于等于,!=用于不等于,以及><>=<=用于比较。这些运算符生成布尔值作为结果。
  • 逻辑运算符: 您可以使用逻辑与(&&)和逻辑或(||)运算符组合布尔值。Quiver还支持逻辑非运算符(!),它用于取反布尔值。
  • 位运算符: 您可以对数值执行按位与(&)、按位或(|)、按位异或(^)和按位非(~)运算。您还可以执行位移运算:<<用于左移,>>用于保留符号的算术右移,>>>用于0填充的逻辑右移。

内置函数

Quiver支持以下内置数学函数列表:

函数名称描述
abs(a)绝对值
acos(a)反余弦
acosh(a)反双曲余弦
asin(a)反正弦
asinh(a)反双曲正弦
atan(a)反正切
atanh(a)反双曲正切
atan2(a, b)两个数的反正切(四象限反正切);ay坐标,bx坐标。
cbrt(a)立方根
ceil(a)向上取整
cos(a)余弦
cosh(a)双曲余弦
exp(a)自然指数
floor(a)向下取整
isfinite(a)如果参数既不是无穷大也不是NaN则为true
isnan(a)如果参数是NaN则为true
ln(a)自然对数
log10(a)以10为底的对数
log2(a)以2为底的对数
max(a, b, ...)所有给定输入中的最大值
min(a, b, ...)所有给定输入中的最小值
pow(a, b)ab次幂
round(a)四舍五入到最接近的整数
signum(a)符号函数
sin(a)正弦
sinh(a)双曲正弦
sqrt(a)平方根
tan(a)正切
tanh(a)双曲正切

控制流

Quiver支持三元运算符a ? b : c来表示“如果ab否则c”。例如,在每个时间点上,$A > 0 ? $B * 10 : $C * 10的值是$B * 10,如果$A在该时间点上的值大于0;否则,值是$C * 10

您还可以使用NaN值在输入序列缺失值时返回替代值。例如,在每个时间点上,@M != NaN ? @M : @K的值是@M,如果它具有数值;否则,值是@K

您可以使用returnskip语句提前“结束”,并返回一个值或指示不应返回任何值(例如筛选掉一个点)。

语言参考

基本类型和赋值

使用var关键字声明变量。使用=符号为变量指派一个值。变量可以是数字(双精度)、布尔值或字符串。

Copied!
1 2 3 4 5 6 7 8 9 var a = 6; var b = 3.14159; var c = 1.602e-19; // 支持指数表示法 var d = 1.602E-19; // 指数部分大小写不敏感 var boolean_example = true; var boolean_example = false; // 重新赋值为 false var string_example = "high"; // 字符串示例

表达式

数值

您可以将字面量和变量组合成更复杂的表达式。

基本的数学运算符是 +-*/。要计算余数,请使用 %

Copied!
1 2 3 4 var a = 2 + 2; // a 的值为 4 a = 3 * 7; // a 的值为 21 a = 3.5 / 7; // a 的值为 0.5 a = 10 % 7; // a 的值为 3

运算符优先级如预期。您可以使用括号 ( ) 将表达式分组在一起。

Copied!
1 2 var a = 5 + 3 * 2; // a的值是11,因为乘法优先于加法,计算顺序为 3*2 + 5。 var b = (5 + 3) * 2; // b的值是16,因为括号内的运算优先,计算顺序为 (5+3)*2。

您还可以使用上述五个运算符的指派版本。

Copied!
1 2 3 4 5 6 var a = 10; a *= 2; // a 现在的值是 20 a += 3; // a 现在的值是 23 a -= 5; // a 现在的值是 18 a /= 3; // a 现在的值是 6 a %= 5; // a 现在的值是 1

布尔值

您可以使用比较运算符 <<=>>= 来比较数字。这些运算符生成布尔值(truefalse)结果。

可以使用 == 检查相等性,使用 != 检查不等性。

然后可以使用逻辑运算符 &&|| 组合这些表达式。

您可以使用 ! 运算符来反转布尔结果(true 变为 falsefalse 变为 true)。

字符串

可以使用 == 检查相等性,使用 != 检查不等性。

Copied!
1 2 3 4 5 6 var a = "high"; var b = "low"; // 比较值 var c = a == a; // true, 检查变量a是否等于自身 var d = a != b; // true, 检查变量a是否不等于变量b