首页 微武游戏指南 正文

《我的世界》bezier(贝塞尔)曲线画法图文攻略教程

   《我的世界》贝塞尔曲线该如何绘制呢?小编今天为大家带来了“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=100 t, 则

   P(s)-P(s-1)=(-0.0008,-0.0022,0.0034)s+(0.1404,0.1211,-0.2017)

   召唤两个雪球a,b:

   1.summon snowball ~10 ~5 ~10 {CustomName:"a",CustomNameVisible:1,NoGravity:1}

   2.summon snowball ~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] ~ ~ ~ summon snowball ~ ~ ~ {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 命令的相对坐标即可。

   如果需要的话可以加一个循环次数的限制,利用计分板即可,原帖中有提及,这里回忆一下:初始化

   scoreboard objectives add temp dummy

   设置循环次数

   scoreboard players set #n temp 100

   在原来的命令方块前方和后方各添加

   scoreboard players test #n temp 1

   设置命令方块模式为

   对于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(贝塞尔)曲线画法图文攻略教程,希望对各位有所帮助。

本文转载自互联网,如有侵权,联系删除