OpenSCAD用户手册/数学运算符
标量算术运算符
标量算术运算符以数值为操作数,并计算出一个新的数值。
| + | 加法 |
| - | 减法 |
| * | 乘法 |
| / | 除法 |
| % | 取模 |
"-"也可以充当前缀操作符,表示对目标数值取反。
关系运算符
关系运算符根据参与计算的两个操作数得到一个布尔值。
| < | 小于 |
| <= | 小于等于 |
| == | 相等 |
| != | 不相等 |
| >= | 大于等于 |
| > | 大于 |
如果操作数皆为简单的数值,那么其意义是不言自明的。
如果操作数皆为字符串,则根据字母顺序来确定相等或次序。例如,"ab" > "aa" > "a"。
如果操作数皆为布尔值,true > false。在一个布尔值与一个数值进行比较时,将true视作1,并将false视作0。对于其他类型与布尔值进行不等式测试时,返回false。
如果操作数皆为向量,则二者相同时返回true,否则返回false。当不等式测试的操作数中有一个或两个向量时,总是返回false因此,如[1] < [2]亦返回false。
用'==' 与 '!='来测试不同的类型,则总是返回不相等。 不同类型之间进行不等式比较时,除了上述布尔值与数值以外,将总是得到false。 请注意,[1]与1是两种截然不同的类型,因此[1] == 1为false。
除了undef以外,undef不等于其他任意值。含有undef的不等式比较将总是得到false。
nan不等于其他任意值(甚至不等于其自身),且不等式测试恒为false。请参见数.
逻辑运算符
所有的逻辑运算符取布尔值作为操作数并计算出一个布尔值。非布尔类型的量值在由逻辑运算符计算前先被转换为布尔值。
| && | 逻辑与 |
| || | 逻辑或 |
| ! | 一元逻辑非 |
由于[false]为true, 因此false || [false]的结果亦为true.
请注意,逻辑运算符与关系运算符处理向量的区别:
[1, 1] > [0, 2] 为 false, 但是
[false, false] && [false, false] 为 true.
条件运算符
?:运算符可用于根据条件对两个表达式之一进行求值。它的工作方式脱胎于类C编程语言系。
| ? : | 条件运算符 |
| 用例: |
a=1;
b=2;
c= a==b ? 4 : 5;
如果a等于b, 便将c设置为4, 否则将c设置为5。
|
向量数运算符
向量数(vector-number)运算符取一个向量与一个数来计算出一个新向量。
| * | 令所有的向量元素与该数进行乘法运算 |
| / | 令所有的向量元素与该数进行除法运算 |
- 示例
L = [1, [2, [3, "a"] ] ]; echo(5*L); // ECHO: [5, [10, [15, undef]]]
向量运算符
向量运算符取两个向量作为操作数来计算出一个新向量。
| + | 两个向量中对应元素相加 |
| - | 两个向量中对应元素相减 |
"-"也可用作前置运算符,令向量中的每个元素逐一取反。
- 示例
L1 = [1, [2, [3, "a"] ] ]; L2 = [1, [2, 3] ]; echo(L1+L1); // ECHO: [2, [4, [6, undef]]] echo(L1+L2); // ECHO: [2, [4, undef]]
向量点积运算符
如果参与乘法运算的两个操作数都为简单向量,则根据点积的线性代数规则,计算结果为一个数。
c = u*v;的计算过程为。如果操作数的大小不匹配,则计算结果为undef。
矩阵乘法
如果参与乘法运算的两个操作数中存在矩阵,则根据矩阵乘积的线性代数规则,计算结果为一个简单向量或一个矩阵。在接下来的讨论中,我们设 Template:Math为矩阵,Template:Math为向量。下标Template:Math表示元素的索引。
对于规模为Template:Math的矩阵Template:Math与规模为Template:Math的矩阵Template:Math而言,二者之积C = A*B;为一个Template:Math矩阵,其中的元素依次为
。
而C = B*A;的结果为undef,除非Template:Math = Template:Math。
对于规模为Template:Math的矩阵Template:Math与规模为Template:Math的向量Template:Math而言,二者之积u = A*v;为一个规模为Template:Math的向量,其中的元素依次为
。
在线性代数中,此为矩阵与列向量的乘积.
对于规模为Template:Math的向量Template:Math与规模为Template:Math的矩阵Template:Math而言,二者之积u = v*A;为一个规模为Template:Math的向量,其中的元素以此为
.
在线性代数中,此为行向量与矩阵的乘积。
矩阵的乘法运算并不满足交换律,即:, 。