LocusAzzurro
本帖最后由 LocusAzzurro 于 2020-9-8 17:44 编辑

IX.源坐标的使用

现在我们来关注一下 -r 标示,它的作用是使生成时使用源坐标,简单来说,就是将整个地图视作一个巨大的立体直角坐标系,虽然生成的范围依旧会被限制在选区中,但使用指令时可以带入实际的坐标进行(即F3画面上的XYZ坐标)运算。
这样说起来可能不好理解,让我们来看一个例子吧:
http://ww2.sinaimg.cn/mw690/0062Lzp6gw1ezdxz8sdq0j311y0jgni9.jpg

我们的目标是建立一个以上图的玻璃方块位置为中心,半径为5的球体,首先我们需要得到这个玻璃方块的坐标,即(-167;30;324) (见上图左上角最后一行Looking at:)。
我们知道,三维球面的方程是(x-xc)2+(y-yc)2+(z-zc)2=r2
带入我们的中心点坐标,并加上半径5,就成了:
  1. (x+167)^2+(y-31)^2+(z-324)^2=25
复制代码
现在我们可以将它转化成不等式,来表达球体内部:
  1. (x+167)^2+(y-31)^2+(z-324)^2<25
复制代码
将其带入指令(不要忘记-r标示):
  1. //g 155 -r (x+167)^2+(y-31)^2+(z-324)^2<25
复制代码
输入指令,可以得到下面的结果:http://ww4.sinaimg.cn/mw690/0062Lzp6gw1ezdxzmkr4cj311y0jnkin.jpg

我们成功地在正确的位置生成了正确的球体(你说你弄这么一大堆就为跟我说个球?)
接着我们来看这个模式可能的另一个应用,使用三个点来生成一个平面:
http://ww1.sinaimg.cn/mw690/0062Lzp6gw1ezdxy14nu0j311y0joqb0.jpg

如上图,在空间里选择了三个点,使用羊毛标注,我们的目标是找到并生成这过这三个点的唯一平面(给出空间中三个不在同一直线的点,仅存在一个过这三点的平面)。
首先我们需要找到这三个点的坐标:
http://ww1.sinaimg.cn/mw690/0062Lzp6gw1ezdxy14nu0j311y0joqb0.jpg
http://ww1.sinaimg.cn/mw690/0062Lzp6gw1ezdyc3jl3mj311y0jj7lc.jpg
http://ww2.sinaimg.cn/mw690/0062Lzp6gw1ezdxyvpfouj311y0jmgtb.jpg



R(-177;23;230)B(-176;36;315)Y(-164;29;316)
通过计算,我们可以得到平面的方程为:
  1. -92x-181y-163z+41669=0
复制代码
接下来我们来将它带入指令
  1. //g 95:0 -r -h -92*x-181*y-163*z+41669<0
复制代码
可以看到等式转换成了不等式,并且使用了-h标示来仅生成平面,输入后我们得到的是:
http://ww2.sinaimg.cn/mw690/0062Lzp6gw1ezdxyz572pj311y0jmtsy.jpg

可以看到我们成功生成了过三点的平面,可以注意到只有这个平面在选区中的部分被生成了,也可以理解为生成了平面与选区范围的交集

LocusAzzurro
本帖最后由 LocusAzzurro 于 2020-9-8 17:43 编辑

X.移动后源坐标的使用

最后,我们来看一下-o 标示,移动过的源坐标,它与之前的-r 标示十分相似,也是使用实际地图坐标长度来进行运算,但二者的区别是-r 完完全全使用的是真实的方块坐标,但-o 模式会将玩家使用命令时所在的位置(或者玩家的第一个选择点,如果使用了/toggleplace),作为三维直角坐标系的原点
和刚才一样,我们来看一个例子:
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezdyw7wm46j311y0jgtkv.jpg

这次我们的目标是生成一个以这个金块为中心的空心椭球,和刚才不同,我们不需要得到这个金块的坐标,而是将这个金块位置的坐标看做原点,即(0;0;0)
接着,我们在这个位置使用指令
  1. //g 95:0 -o -h x^2+(2*y)^2+z^2<100
复制代码

可以看到使用了-o 与 -h 标示,并且并没有对像刚才一样带入中心点的坐标,如此输入的结果是:
http://ww1.sinaimg.cn/mw690/0062Lzp6gw1ezdywpiwquj311y0jhqhw.jpg

从外面看的效果如下:
http://ww2.sinaimg.cn/mw690/0062Lzp6gw1ezdywks0s5j311y0jlwy5.jpg

成功生成了需要的椭球。

最后我们来看一个斜面:http://ww1.sinaimg.cn/mw690/0062Lzp6gw1ezdywxhk63j311y0jk7n9.jpg

如上图,我们在钻石块位置使用指令:
  1. //g 155 -o -h x<y
复制代码
因为x=y平面的特性,可以生成一个45度的斜面效果如下:
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezdyx7w6ccj311y0jpwp0.jpg

整体效果:
http://ww4.sinaimg.cn/mw690/0062Lzp6gw1ezdyx4fu7sj311y0jnh0m.jpg

至此,对于指令本身的研究结束,接下来会展示一些本人收集到的一些实际的应用与实际操作例子(部分为个人研究,部分为在他人的研究之上进行的深入,部分为他人的研究)。

LocusAzzurro
本帖最后由 LocusAzzurro 于 2020-9-8 18:04 编辑

XI.例子-曲面

接下来我们来了解一些这个指令的实际应用,这些应用一般与建筑有关,也会有一些其他非相关的形体。每个图形我仅会给出所用的公式与标示,前面的主命令与方块部分需要自己补全,即使用时要使用如下格式:

//g <方块ID> <下文给出部分>
1. 半球
  1. x^2+(y+1)^2+z^2<1
复制代码
形体高度=选区高度/2如果使用了-h标示便可以生成半球穹顶。
http://ww1.sinaimg.cn/mw690/0062Lzp6gw1ezdzft51b3j311y0jjwu0.jpg


2. 圆柱体
两个的表达式分别为
  1. x^2+z^2<1
复制代码
  1. x^2+y^2<1
复制代码
形体高度=选区高度使用 -h 可以生成空心圆柱
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezdzc3z1ytj311y0jl4f2.jpg
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezdzcd6t1nj311y0jlqhx.jpg



3. 半圆拱顶
通过将上一个圆柱体向下移动一单位并使用-h得到
  1. -h x^2+(y+1)^2<1
复制代码
形体高度=选区高度/2将x替换为z可以得到另一个方向的拱顶
http://ww1.sinaimg.cn/mw690/0062Lzp6gw1ezdzckzji1j311y0jj15u.jpg


4.半圆十字拱/穹形拱顶
通过将两个方向的半圆拱顶交叉形成
  1. -h x^2+(y+1)^2<1||z^2+(y+1)^2<1
复制代码
形体高度=选区高度/2
http://ww1.sinaimg.cn/mw690/0062Lzp6gw1ezdzc8vdqjj311y0jmtm1.jpg


5. 抛物面
  1. -h x^2+y<0
复制代码

形体高度=选区高度/2将x替换为z可以生成另一方向的抛物面抛物线形的拱顶
http://ww4.sinaimg.cn/mw690/0062Lzp6gw1ezdzh5tv4gj311y0jok3p.jpg


6. 抛物面十字拱
通过将两个方向的抛物面交叉形成
  1. -h x^2+y<0||z^2+y<0
复制代码
形体高度=选区高度/2
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezdzgqm1f8j311x0jk4au.jpg



7. 等角拱
通过两个稍大平移过的圆柱体的交集形成
  1. -h (x+1)^2+(y+1)^2<4&&(x-1)^2+(y+1)^2<4
复制代码
形体高度=选区高度/0.25+sqrt(2)/2将x替换为z可以生成另一个方向的拱顶
http://ww4.sinaimg.cn/mw690/0062Lzp6gw1ezdzbnpseoj311y0jogzy.jpg


8. 十字尖拱/肋形拱顶
通过将两个方向的等角拱交叉形成
  1. -h ((x+1)^2+(y+1)^2<4&&(x-1)^2+(y+1)^2<4)||((z+1)^2+(y+1)^2<4&&(z-1)^2+(y+1)^2<4)
复制代码
形体高度=选区高度/0.25+sqrt(2)/2
http://ww4.sinaimg.cn/mw690/0062Lzp6gw1ezdzrfaxjfj311v0jntov.jpg



9. 圆锥
  1. x^2+z^2<(0.5*(y-1))^2
复制代码
形体高度=选区高度使用-h可以生成空心形体
http://ww2.sinaimg.cn/mw690/0062Lzp6gw1ezdzbsjcokj311y0jl4cz.jpg


10.旋转抛物面
  1. x^2+z^2+y<1
复制代码
形体高度=选区高度
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezdzhktw0qj311y0kcqic.jpg



11. 抛物面帆拱
通过上一个形体的空心形体得到
  1. x^2+z^2+y<1
复制代码
形体高度=选区高度帆拱为从圆形面到方形面的转换
http://ww1.sinaimg.cn/mw690/0062Lzp6gw1ezdzho5b9qj311y0kcwui.jpg


12. 球形帆拱
通过稍大的半球穹顶的空心形体得到
  1. -h x^2+(y+1)^2+z^2<2
复制代码
形体高度=选区高度
http://ww1.sinaimg.cn/mw690/0062Lzp6gw1ezdzr8zwz2j311y0jlaq4.jpg


13. 双曲面
  1. x^2/A+z^2/B-y^2/C<D
复制代码
A,B,C,D可以分别取值,下图使用的是
  1. x^2/0.4+z^2/0.4-y^2<1
复制代码
形体高度=选区高度
http://ww4.sinaimg.cn/mw690/0062Lzp6gw1ezdzfy6l4yj311y0jik7o.jpg


14. 圆弧旋转面
通过将圆弧沿Y轴旋转一周得到
  1. (1-sqrt(x^2+z^2))^2+y^2 > A && y>0
复制代码
A 可取值来决定大小,下图使用
  1. (1-sqrt(x^2+z^2))^2+y^2 > 0.9 && y>0
复制代码
形体高度=选区高度/2生成在选区上半部分将多个形体连续放置可以得到扇形拱顶
http://ww2.sinaimg.cn/mw690/0062Lzp6gw1ezdzcg8elvj311y0k6h2c.jpg


15. 四面攒尖顶
通过4个方向的抛物面外部的交集形成,并只取下半部分
  1. -h y^2+x>0&&y^2+z>0&&y^2-x>0&&y^2-z>0&&y<0
复制代码
形体高度=选区高度/2
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezdzru0w7aj311y0jpqg3.jpg



16. 圆形攒尖顶
圆弧旋转面的下半边
  1. (1-sqrt(x^2+z^2))^2+y^2 > A && y<0
复制代码
A 可取值决定大小,下图使用
  1. (1-sqrt(x^2+z^2))^2+y^2 > 0.9 && y<0
复制代码
形体高度=选区高度/2
http://ww4.sinaimg.cn/mw690/0062Lzp6gw1ezdzrj5r59j311y0jodti.jpg



17. 葱型圆顶
  1. -h x^2+z^2<(0.5*sin(0.75*pi*(y+1))+0.5)^2
复制代码
形体高度=选区高度
http://ww4.sinaimg.cn/mw690/0062Lzp6gw1ezdzg8h9wzj311y0jjnbn.jpg


LocusAzzurro
本帖最后由 LocusAzzurro 于 2020-9-8 18:09 编辑

XII.例子-多面体

1.四棱柱
旋转45度后的正方体
  1. -2*x+2*z+2>0 && -2*x-2*z+2>0 && 2*x+2*z+2>0 && 2*x-2*z+2>0
复制代码
形体高度=选区高度
http://ww1.sinaimg.cn/mw690/0062Lzp6gw1ezdzbhwwl5j311y0jjap6.jpg

2.三棱柱
底边平行于X轴
  1. z<(3*sqrt(2)/2)*x+(3*sqrt(2)-2)/2 && z<-(3*sqrt(2)/2)*x+(3*sqrt(2)-2)/2
复制代码
形体高度=选区高度
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezdzs0n6nzj311y0ji4i3.jpg

3.金字塔/四棱锥
  1. -2*x-y+1>0 && 2*x-y+1>0 && -2*z-y+1>0 && 2*z-y+1>0
复制代码
形体高度=选区高度
http://ww4.sinaimg.cn/mw690/0062Lzp6gw1ezdzrbygu5j311y0jlqhd.jpg

4.四面体
  1. 4*x + 4*y +4*z + 4>0 &&-4*x + 4*y +4*z -4<0&&-4*x + 4*y +-4*z + 4>0&&4*x + 4*y +-4*z -4<0
复制代码
形体高度=选区高度
http://ww2.sinaimg.cn/mw690/0062Lzp6gw1ezdzrxk858j311y0jodz5.jpg

LocusAzzurro
本帖最后由 LocusAzzurro 于 2020-9-8 18:26 编辑

XIII.使用例子

最后,我们来看几个实际的操作例子:
1. 肋形穹顶走廊
操作目标是在这些柱子上加上肋形穹顶
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezdztvfjjhj311y0jl4lh.jpg

首先确定选区,选区底边的四个点为四根柱子的中心点
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezdzu12l6vj311y0jlap5.jpg

接下来使用肋形穹顶的指令
  1. //g 1:6 -h ((x+1)^2+(y+1)^2<4&&(x-1)^2+(y+1)^2<4)||((z+1)^2+(y+1)^2<4&&(z-1)^2+(y+1)^2<4)
复制代码

http://ww1.sinaimg.cn/mw690/0062Lzp6gw1ezdzu4b6l0j311y0jjdv6.jpg

成功生成了穹顶
http://ww2.sinaimg.cn/mw690/0062Lzp6gw1ezdzu9babdj311y0jn196.jpg

接下来使用//stack进行堆积即可,最终效果如下
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezdzuf9e2bj311y0jlh1c.jpg


2. 半椭球穹顶
目标为在圆形底座上创建半椭球型的穹顶,首先创建选区
http://ww1.sinaimg.cn/mw690/0062Lzp6gw1ezdzur4lemj311y0jjk7j.jpg

使用指令
  1. //g lapislazuli -h x^2+(y+1)^2+z^2<1
复制代码

http://ww2.sinaimg.cn/mw690/0062Lzp6gw1ezdzuwia1tj311y0jowun.jpg

成功生成,效果如下
http://ww3.sinaimg.cn/mw690/0062Lzp6gw1ezdzv201z7j311y0jiatn.jpg


3. 复合式穹顶
使用帆拱与圆形穹顶组合的复合式穹顶首先创建一个帆拱
  1. //g 155 -h -h x^2+(y+1)^2+z^2<2
复制代码

http://ww2.sinaimg.cn/mw690/0062Lzp6gw1ezdzz5y2ffj311w0jlgxj.jpg

接下来将选区向上平移先前选区的一半高度的距离(这里的选区为30x30x30,所以向上平移15格),移除帆拱的上半部分,留下的下半部分作为复合式穹顶的穹隅
http://ww4.sinaimg.cn/mw690/0062Lzp6gw1ezdzz8ya25j311y0jmqfm.jpg

接下来,不改变选区的位置,使用半球穹顶的指令
  1. //g 155 -h x^2+(y+1)^2+z^2<1
复制代码

http://ww2.sinaimg.cn/mw690/0062Lzp6gw1ezdzzdkphyj311y0jngxh.jpg

成功生成,效果如下
http://ww1.sinaimg.cn/mw690/0062Lzp6gw1ezdzzmc89pj311y0jj0zi.jpg


4. 扇形拱顶
http://ww4.sinaimg.cn/mw690/0062Lzp6gw1ezdzzq167qj311s0jjwxb.jpg
前文提到的扇形拱顶,使用圆弧旋转面的组合来完成

5. 光学三棱柱
一个简单的小作品【突然有的脑洞2333
http://ww4.sinaimg.cn/mw690/0062Lzp6gw1ezdzzul3jpj311y0jnwzu.jpg

LocusAzzurro
本帖最后由 LocusAzzurro 于 2020-9-8 18:29 编辑

XIV. 相关资料与来源

【WE插件进阶】//GEN命令 建筑屋顶基本型公式总结
作者 sara_yiwei
http://tieba.baidu.com/p/3063854405
例子部分多个例子来源与研究基础(即只提供公式,后续分析由笔者完成)]

【WorldEdit】WE中//generate指令的研究(教程+讨论向)
作者 Az蓝色轨迹(本人)
http://tieba.baidu.com/p/2714393353
[本文大部分内容研究基础]

Wikipedia数词条
[相关专业知识来源]

LocusAzzurro
本帖最后由 LocusAzzurro 于 2020-9-8 18:30 编辑

XV.后记

我认为这是一个WorldEdit一个非常有潜力,但仍未被发掘的功能,希望更多人能进行更深入的研究,使它的光芒发挥到极致。

- LocusAzzurro

Skey
{:10_530:}怒占沙发(伪沙发)
楼主对WE的研究真是深呐,膜拜!

孤独秋叶
WorldEdit有很多用处都没被重视,很多人都只用于填地,或者弄一下几何而已

MuChenyu
我天= =we这么nb

Wsbyeah
楼主在刷精华

LocusAzzurro
孤独秋叶 发表于 2015-12-28 06:05
WorldEdit有很多用处都没被重视,很多人都只用于填地,或者弄一下几何而已

恩,我也就弄一下几何了 {:10_518:}

黑星nova
这个教程一个赛艇,想起来之前和dreamweaver俩人在一个单开的世界里各种玩//g,不亦乐乎,这个指令的潜力的确很大,就是使用门槛高了一点。顺带一提,这玩意做拱券还是挺舒服的。

哐哐哐
然而我只上初一,啥都听不懂{:10_522:}

andylizi
。。。。。。。。
。。。。。。。。。。。。。。。。
看到标题时想,太感动了,终于有这个的中文教程了
看完后。。。
无言以对。。。

LocusAzzurro
andylizi 发表于 2015-12-29 09:15
。。。。。。。。
。。。。。。。。。。。。。。。。
看到标题时想,太感动了,终于有这个的中文教程了

无言以对是怎么讲。。

机器人WBW
我以后试着用原版实现这些功能吧(金字塔已经有了想法了但是没发)

andylizi
LocusAzzurro 发表于 2015-12-29 21:21
无言以对是怎么讲。。

意思就是逼死我小学6年级
三角函数是什么鬼

j7528802
虽然我是数学渣,但是能在国内出现这个指令的教程好感动啊

1027122.2
大神啊{:10_552:}

你猜猜是谁
楼主厉害{:10_523:}

Dfeat_败类
创世神教程?

117779284
现在大触建筑都是各种工具。

YangZhong1314
水水水水水水水水水水水水水水水水水水水水水水水水!!!!!!!!!
太好了我要的就是这个

圣骑士686
我好像学到了什么新的技能

Exodus
仔细想想艺术雕刻和数控车床好像没太大关系_(:з」∠)_

Yy星人
精了!我一个都没看懂

yirk
都是学霸,小弟跪了

Noble_shuibie
精华中的精华

Kelcoin
太可怕了!!
大神啊!!!

qq1394236817
怒顶蓝鸡触!!!!!!

app6609
那么好的帖子怎能没有回复,赞一个

mc1549570730
听到8000字我就来看看了 楼主幸苦了

935262316
真是好教程,但是有点听不懂

roseauxyw
yiwei赶来支持!AZ的总结太棒了  把这个//GEN命令 细化解释成了一个体系。

一直在想,如果这些公式能预存为简单指令,对于不care逻辑过程的小伙伴们来说应用起来会超级方便的!!  
左键-右键-选中一个区域-直观分类按键-HUA-生成

一种办法是写一个小插件
或者用一个工地小地图 预存命令方块来实现?

哈哈 很想和你探讨一下。

LocusAzzurro
本帖最后由 LocusAzzurro 于 2016-2-22 18:35 编辑
roseauxyw 发表于 2016-2-22 10:37
yiwei赶来支持!AZ的总结太棒了  把这个//GEN命令 细化解释成了一个体系。

一直在想,如果这些公式能预存 ...

其实我想过使用WE自带脚本执行这些的可能性,目前正在和小组探讨这部分内容。
另外有没有看淡其他的研究啊www

LuAria
想问大大关于一开始选区的问题,怎么让它形成一个三维的坐标选区(我用//sel cuboid来选区,最后出来的都是立方体)?好多函数想出来都用不了T^T

LocusAzzurro
LuAria 发表于 2016-3-17 15:02
想问大大关于一开始选区的问题,怎么让它形成一个三维的坐标选区(我用//sel cuboid来选区,最后出来的都是 ...

//sel cuboid 就是立方体选区啊,直接选出来输入要生成的函数就行了,一般生成选区最好选成长宽高都相等的

LuAria
LocusAzzurro 发表于 2016-3-17 22:18
//sel cuboid 就是立方体选区啊,直接选出来输入要生成的函数就行了,一般生成选区最好选成长宽高都相等 ...

我选了第一个点之后,在对角线(立体的)那端再选第二个点(一共有3375个块),然后输入//g 79 x^2+z^2<10,最后显示的是由3375个冰块合成的正方体?

LocusAzzurro
LuAria 发表于 2016-3-17 15:31
我选了第一个点之后,在对角线(立体的)那端再选第二个点(一共有3375个块),然后输入//g 79 x^2+z^2 ...

阁下一定没好好看完文章,坐标系边界是 [-1,+1], <10 肯定会整个选区填满的啊。
另外有更多问题的话建议私信联系,不然一会成版聊了。

Ttttt...
LocusAzzurro 发表于 2015-12-27 03:44
X.移动后源坐标的使用

最后,我们来看一下-o 标示,移动过的源坐标,它与之前的-r 标示十分相似,也是使用 ...

打错
正弦应该是sin,余弦才是cos

1962903464
LocusAzzurro 发表于 2015-12-29 21:21
无言以对是怎么讲。。

就是神马都看不懂

東冻Dong
都是精华

yuen27787231
這個十分之實用 但是要利用到數學的應用我真是怕了

azide
了解了谢谢

NEIKI
第一次用。。教程很有用啊。

An_Lan
有worldpainter内味了

绝影寒潭
好厉害的感觉,但是我还是不懂。。太笨了

晓夜Port
没想到蓝鸡15年就开始做WE指令了

菜菜没有名字
写的也太详细了,真是有被感动到QAQ

第一页 上一页下一页 最后一页