《我的世界》贝塞尔曲线该如何绘制呢?小编今天为大家带来了ruhuasiyu编写的《我的世界》bezier(贝塞尔)曲线画法图文攻略教程,一起来看看吧!
Bezier曲线
首先我就不贴那两张图了。这样的曲线叫做Bezier曲线,n+1个点控制的我们称为n阶Bezier曲线,因为这条曲线的方程式n次的。
例如n=2时,对应的曲线一定是抛物线。
过程我不作推导,n次Bezier曲线的方程以向量形式为
特别地,n=2时为
例子和命令
以P_0=(0,0,0),P_1=(7,6,-10),P_2=(10,1,-3)为例
P=(-4t^2+14t,-11t^2+12t,17t^2-20t)
令步数为100,s=100t,则
P(s)-P(s-1)=(-0.0008,-0.0022,0.0034)s+(0.1404,0.1211,-0.2017)
召唤两个雪球a,b:
1.summonsnowball~10~5~10{CustomName:a,CustomNameVisible:1,NoGravity:1}
2.summonsnowball~10~5~10{CustomName:b,CustomNameVisible:1,NoGravity:1}
依次执行(对应循环、连锁条件开启、连锁条件开启的命令方块)
1.tp@e[name=a]~0.1404~0.1211~-0.2017
2.execute@e[name=b]~~~tp@e[name=a]~-0.0008~-0.0022~0.0034
3.execute@e[name=a]~~~summonsnowball~~~{CustomName:b,CustomNameVisible:1,NoGravity:1}
算法速度为O(N),即只有几百次,而原来作者的算法则为O(N^2)为几万次。
计算公式
坐标计算公式如下:
以P_0=(0,0,0),P_1=(a,b,c),P_2=(d,e,f),步数为N为例,计算出
1.(2a(N+1)-d)/N^2,(2b(N+1)-e)/N^2,(2c(N+1)-f)/N^2,
2.(2d-4a)/N^2,(2e-4b)/N^2,(2f-4c)/N^2,
带入两个execute命令的相对坐标即可。
如果需要的话可以加一个循环次数的限制,利用计分板即可,原帖中有提及,这里回忆一下:初始化
scoreboardobjectivesaddtempdummy
设置循环次数
scoreboardplayersset#ntemp100
在原来的命令方块前方和后方各添加
scoreboardplayerstest#ntemp110000
设置命令方块模式为
对于n阶Bezier曲线,设步长为N,将t=s/N代入公式中计算出P(s),
然后计算P(s)-P(s-1)得到s的n-1阶多项式,将其从低次到高次的坐标依次代入
1.tp@e[name=a]~这里~这里~这里
2.execute@e[name=b]~~~tp@e[name=a]~这里~这里~这里
3.execute@e[name=b]~~~execute@e[name=b]~~~tp@e[name=a]~这里~这里~这里
4.……
5.直到n-1个execute@e[name=b]~~~……execute@e[name=b]~~~tp@e[name=a]~这里~这里~这里
即可。
这是用4条Bezier曲线拟合得到的圆
以上就是《我的世界》bezier(贝塞尔)曲线画法图文攻略教程,希望对各位有所帮助。