本帖最后由 LocusAzzurro 于 2020-9-8 16:18 编辑
VII.逻辑门的使用与多面体
在之前我们提到了在表达式中可以使用逻辑门,我们首先来回顾一下:
&& 表示逻辑与门|| 表示逻辑或门! 加在一段表达式前表示逻辑非门
那么这些逻辑门有什么作用呢,我们来一个个看一下:
逻辑
与门代表集合论中的
交集,即
同时属于两个或更多集合的元素,在几何中我们可以理解为
同时满足多个不等式的部分。
我们可以用一个例子来理解一下:如下图表示的是
y<0的区域指令
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezdxl9z6w4j311y0jlk3h.jpg
下图表示的是 x<0 的区域指令
http://ww4.sinaimg.cn/mw690/0062Lzp6gw1ezdxl7b69ij311y0joqgt.jpg
那么如果我们使用逻辑与门将两个表达式连接,即
我们表达的是两部分的交集(即
y<0∩x<0),即同时满足两个不等式的区域,也可以说是两部分共有的区域。使用指令
我们会得到下面的结果:
http://ww2.sinaimg.cn/mw690/0062Lzp6gw1ezdxl16m7nj311y0jlwqc.jpg
这印证了我们刚才所说的,只有两部分(红色与蓝色的部分)共有的区域被生成了。
接下来是逻辑
或门,它相当于集合论中的
并集,如果我们依旧使用之前的两个不等式
x<0 与
y<0但使用逻辑与门来连接,即
我们表达的是两个不等式的并集(
x<0∪y<0),即两个不等式的区域相加的结果,也可以说是所有包括在两个不等式的任何一个中或两个中的区域。使用指令:
我们得到的是下面的结果:
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezdxl4i116j311y0jj4c4.jpg
可以看到,生成的区域包括了之前两个不等式所有的部分。
最后我们一起看一下逻辑
非门以及
多个逻辑门的使用。逻辑非门表示“
不属于这个集合的部分”,即
如果我们的集合是y<0,那么如果我们在它之前加上非门,即 !(y<0) (由于!符号的多种意义,建议在为需要使用非门的部分加上括号),
我们表达的就是y>0 的部分(其实是y>=0,但WorldEdit不支持等式),即属于 y<0 的部分。多个逻辑门的使用即为
使用多个逻辑门来表达一个特定的区域,这里需要注意的是,就像数学计算一样,先乘除后加减,先计算括号内部分,从左到右计算一样,逻辑运算也有它的规则:
- 和数**算一样,逻辑运算中括号也有最高的优先级,并遵循从左到右的运算顺序。
同样,我们继续使用之前的两个不等式来举例,这一次我们表达的是:
表达的是x<0与非y<0的交集,我们知道我们首先需要计算非门,所以我们的表达式可以理解为:
即为x<0 与 y>0的交集。整个表达式表达的是“
x>0区域与非y<0区域共有的部分”。让我们把它写进命令里:
会得到这个结果:
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezdxkyb1n1j311y0jn153.jpg
就像我们刚才所说。
讲了那么多我们来看一个
实际的例子,一个在选区中心,边长为1的正方体,我们
需要先确定正方体6个面所属的平面,然后用不等式决定区域(这里需要有些3D分析能力),找到6个不等式然后将它们用 逻辑与门 && 连起来,意思就是找到这6个区域共有的区域,那个区域就是我们的正方体了。
我们的正方体的
8个顶点分别为:
- (0.5;0.5;0.5)
- (0.5;-0.5;0.5)
- (0.5;0.5;-0.5)
- (0.5;-0.5;-0.5)
- (-0.5;0.5;0.5)
- (-0.5;-0.5;0.5)
- (-0.5;0.5;-0.5)
- (-0.5;-0.5;-0.5)
它的六个面所属的
六个平面将会分别为:
- x=0.5
- x=-0.5
- y=0.5
- y=-0.5
- z=0.5
- z=-0.5
接下来将它们变为
不等式:
- x<0.5
- x>-0.5
- y<0.5
- y>-0.5
- z<0.5
- z>-0.5
这6个不等式的空间区域的
交集就是那个正方体了。我们用
&&表示逻辑与门,就是
交集,这样就可以把6个不等式连起来:
- x<0.5 && x>-0.5 && y<0.5 && y>-0.5 && z<0.5 && z>-0.5
复制代码
最后的指令就是:
- //g 155 x<0.5 && x>-0.5 && y<0.5 && y>-0.5 && z<0.5 && z>-0.5
复制代码
输入指令,成功生成了正方体:
http://ww1.sinaimg.cn/mw690/0062Lzp6gw1ezdxkpeo4qj311x0jo143.jpg
以上便是多面体的生成方式以及逻辑门的使用,接下来我们来通过几个例子看一看WorldEdit中
函数的使用。