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
。
矩阵乘法
[编辑]如果参与乘法运算的两个操作数中存在矩阵,则根据矩阵乘积的线性代数规则,计算结果为一个简单向量或一个矩阵。在接下来的讨论中,我们设 A, B, C...为矩阵,u, v, w...为向量。下标i, j表示元素的索引。
对于规模为n × m的矩阵A与规模为m × p的矩阵B而言,二者之积C = A*B;
为一个n × p矩阵,其中的元素依次为
。
而C = B*A;
的结果为undef
,除非n = p。
对于规模为n × m的矩阵A与规模为m的向量v而言,二者之积u = A*v;
为一个规模为n的向量,其中的元素依次为
。
在线性代数中,此为矩阵与列向量的乘积.
对于规模为n的向量v与规模为n × m的矩阵A而言,二者之积u = v*A;
为一个规模为m的向量,其中的元素以此为
.
在线性代数中,此为行向量与矩阵的乘积。
矩阵的乘法运算并不满足交换律,即:, 。