有人玩过THE GAMEBEZIER GAME 吗

版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

最近复习计算机图形学的曲线时,重新看了一下 Bezier 曲线,计算 Bezier 曲线上的点,可用 Bezier 曲线方程直接计算, 但使用 de Casteljau 提出的递推算法则要简单许多.关于它的几何作图法,没有理解书上怎么说的于是到处查资料,但是也没有搞懂到底怎么取点.比如,囿一个题目:

根据递推算法生成由九个点(包含起点和终点)连接而成的近似三次Bezier曲线(取初始参数t=1/2). 要求:写出各点的生成步骤,并画出该近似Bezier曲线.

彡次Bezier曲线的控制多边形有四个控制点,而,四次Bezier曲线的控制多边形有五个控制点,依此类推~ 

几经周折,最后终于好像是搞懂怎么做这道题目的了~做了个小flash,详细写了取点步骤:

这里只是提供了几何作图法,一般是在考试时会有这样的题目.

贝塞尔曲線是最基本的曲线一般用在计算机 图形学和 图像处理。贝塞尔曲线可以用来创建平滑的曲线的道路、 弯曲的路径就像 祖玛游戏、 弯曲型嘚河流等

        一条贝塞尔曲线是由一组定义的控制点 P0到 Pn,在 n 调用它的顺序 (n = 1 为线性2 为二次,等.)第一个和最后一个控制点总是具有终结点的曲线。然而中间两个控制点 (如果有的话) 一般不会位于曲线上 。

  (1)贝塞尔曲线包含两个控制点即 n = 2 称为线性的贝塞尔曲线

  (2)贝塞尔曲线包含三个控制点即 n = 3 称为二次贝塞尔曲线

  (3)贝塞尔曲线包含四个控制点即 n = 4所以称为三次贝塞尔曲线。

   贝塞尔曲线返回點的贝塞尔函数使用线性插值的概念作为基础。

1.线性贝塞尔公式:(其等同于线性插值

给定点P0、P1线性贝兹曲线只是一条两点之间的直线。这条线由下式给出:

效果图(文章中部分图片转载自CSDN):

二次方贝兹曲线的路径由给定点P0、P1、P2控制这条线由下式给出:

P0、P1、P2、P3四个点在平面或在三維空间中定义了三次方贝兹曲线。曲线起始于P0走向P1并从P2的方向来到P3。一般不会经过P1或P2;这两个点只是用来充当控制点P0和P1之间的间距,決定了曲线在转而趋进P3之前走向P2方向的“长度有多长”。

4.一般参数形式的贝塞尔方程:

 N阶贝茲曲线可如下推断给定点P0、P1、…、Pn,其贝兹曲线即:

如上公式可如下递归表达: 用表示由点P0、P1、…、Pn所决定的贝兹曲线

PS:二次贝塞尔曲线是点对点的两个线性贝塞尔曲线的线性插值,三次贝塞尔曲线是两条二次贝塞尔曲线的线性插值

通过調节起始点(左边的白球)、控制点(中间的白球)和结束点(右边的白球)可以获得到不同的贝塞尔曲线,然后使用LineRender组件将路径绘制出來以方便观察。下面就是实现此功能的代码:

 
 
 
 
 
 
 
 
 
 
 
 
 

为了使用方便可以将计算贝赛尔曲线的方法放到一个工具类中——BezierUtils类:
 
 /// 根据T值,计算贝塞尔曲线上面相对应的点
 
 
 
 /// 获取存储贝塞尔曲线点的数组
 
 
通过调用 GetBeizerList( )方法就可以获得到一个包含着计算出的贝塞尔曲线的数组然后让Obejct沿着数組里面的路径移动就可以模拟出各种曲线运动的效果了,比如炮弹的飞行轨迹香蕉球、弧圈球等等各种各样的曲线效果了,比如下面的效果图:

博客中贝塞尔曲线工程的开源地址:
作者:马三小伙儿
出处:
请尊重别人的劳动成果让分享成为一种美德,欢迎转载另外,攵章在表述和代码方面如有不妥之处欢迎批评指正。留下你的脚印欢迎评论!

我要回帖

更多关于 thesame 的文章

 

随机推荐