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的向量,其中的元素以此為
.
在線性代數中,此為行向量與矩陣的乘積。
矩陣的乘法運算並不滿足交換律,即: , 。