跳至内容

OpenSCAD 用户手册/数学运算符

来自维基教科书,开放世界的开放书籍

标量算术运算符

[编辑 | 编辑源代码]

标量算术运算符以数字作为操作数,并生成一个新的数字。

+
-
*
/
% 取模
^ 指数 [注意: 需要版本 2021.01]

- 也可以用作前缀运算符来否定一个数字。

在 2021.01 版本之前,使用内置数学函数 pow() 而不是 ^ 指数运算符。

 ?  条件运算符
用法示例
a=[for(i=[0:10])i%2];
echo(a);//ECHO: [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0]

for(i=[0:10]) translate([i,i%2?0:5])cube(1); // move every even up

余数为 0 或 1 偶数/奇数

关系运算符

[编辑 | 编辑源代码]

关系运算符根据两个操作数生成布尔值结果。

< 小于
<= 小于或等于
== 等于
!= 不等于
>= 大于或等于
> 大于

如果两个操作数都是简单的数字,那么含义不言自明。

如果两个操作数都是字符串,那么字母顺序决定相等性和顺序。例如,"ab" > "aa" > "a"。

如果两个操作数都是布尔值,那么 true > false。在布尔值和数字之间的不等式比较中,true 被视为 1,而 false 被视为 0。涉及布尔值的其他不等式测试返回 false。

如果两个操作数都是向量,那么当向量相同且向量不同时,相等性测试返回 truefalse。涉及一个或两个向量的不等式测试始终返回 false,例如 [1] < [2] 是 false

不同类型始终通过 '==' 和 '!=' 测试为不相等。涉及不同类型的不等式比较(除上述布尔值和数字外)始终返回 false。请注意,[1] 和 1 是不同类型,所以 [1] == 1 为 false。

undef 不等于任何东西,除了 undef。涉及 undef 的不等式比较返回 false

nan 不等于任何东西(甚至不等于自身),并且所有不等式测试都返回 false。请参见 数字

逻辑运算符

[编辑 | 编辑源代码]

所有逻辑运算符都以布尔值作为操作数,并生成布尔值。非布尔值数量在运算符计算之前转换为布尔值。

&& 逻辑 AND
|| 逻辑 OR
! 逻辑一元 NOT

由于 [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" 部分必须是计算结果为布尔值的内容。

向量-数字运算符

[编辑 | 编辑源代码]

向量-数字运算符以向量和数字作为操作数,并生成一个新的向量。

* 将所有向量元素乘以数字
/ 将所有向量元素除以数字
示例
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的向量,其元素为

.

在线性代数中,这是行向量和矩阵的乘积。

矩阵乘法不满足交换律:

华夏公益教科书