跳转到内容

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。
"a==b"部分必须要计算出一个布尔值。

向量数运算符

[编辑]

向量数(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的向量,其中的元素以此为

.

在线性代数中,此为行向量与矩阵的乘积。

矩阵的乘法运算并不满足交换律,即:,