跳至內容

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的向量,其元素為

.

線上性代數中,這是行向量和矩陣的乘積。

矩陣乘法不滿足交換律:

華夏公益教科書