贝塞尔曲线绘画技巧详解 新手必备教程

作者:来源:三省网发布时间:2016-08-18 18:15

我的世界贝塞尔曲线想必大家也是听说过的,这个贝塞尔曲线怎么绘制呢,对于新手玩家们来说可能摸不到头绪,不过如果掌握了以下的绘制技巧那就简单了。一起来学习一下。

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:

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

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

依次执行(对应循环、连锁条件开启、连锁条件开启的命令方块)

tp @e[name=a] ~0.1404 ~0.1211 ~-0.2017

execute @e[name=b] ~ ~ ~ tp @e[name=a] ~-0.0008 ~-0.0022 ~0.0034

execute @e[name=a] ~ ~ ~ summon snowball ~ ~ ~ {CustomName:"b",CustomNameVisible:1,NoGravity:1}

算法速度为 O(N),即只有几百次,而原来作者的算法则为 O(N^2) 为几万次。[INC=http://www.mofang.com/zt_new//wdsj/inc/gldq.html]

计算公式

坐标计算公式如下:

以 P_0=(0,0,0), P_1=(a,b,c), P_2=(d,e,f), 步数为 N 为例,计算出

(2a(N+1)-d)/N^2, (2b(N+1)-e)/N^2, (2c(N+1)-f)/N^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 10000

设置命令方块模式为

对于n阶Bezier曲线,设步长为 N,将t=s/N 代入公式中计算出 P(s),

然后计算 P(s)-P(s-1) 得到 s 的 n-1 阶多项式,将其从低次到高次的坐标依次代入

tp @e[name=a] ~这里 ~这里 ~这里

execute @e[name=b] ~ ~ ~ tp @e[name=a] ~这里 ~这里 ~这里

execute @e[name=b] ~ ~ ~ execute @e[name=b] ~ ~ ~ tp @e[name=a] ~这里 ~这里 ~这里

……

直到 n-1 个 execute @e[name=b] ~ ~ ~ …… execute @e[name=b] ~ ~ ~ tp @e[name=a] ~这里 ~这里 ~这里

即可。

这是用4条Bezier曲线拟合得到的圆

到这里,整个内塞尔曲线的教程就讲完了,在应用上当然不仅仅只有这个,更多的用途就需要大家在以后的游戏中慢慢体会了。

我的世界

网易游戏代理的《我的世界》(Minecraft)手游,你想玩的,这里都有! 全新村庄更新重磅上线,焕然一新的村庄和村民,特色“袭击”玩法开启村庄保卫战。更有第五人格、阴阳师、赛尔号等大波超人气玩法等你来体验! 作为中国顶尖UGC游戏平台,《我的世界》汇聚全球优秀创造者提供海量玩法内容,共同打造更好的游戏大世界! 凭借开放自由的游戏世界、超乎想象的游戏玩法,《我的世界》深受上亿玩家的喜爱。[详情]