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

 .

在線性代數中,此為行向量與矩陣的乘積。

矩陣的乘法運算並不滿足交換律,即: ,