贝塞尔曲线最近经常接触到,今天研究了一下。

  • 原理

关于它的原理,网上有很多。

1.一阶

2.二阶

3.多阶

可以看到,多阶可以慢慢降阶为一阶贝塞尔曲线。

  //一阶
private Vector3 BaseBezier(float t,Vector3 pos0,Vector3 pos1)
{
return pos0 + t * (pos1-pos0);
}

递归,降阶为一阶

  //n阶
private Vector3 BezierPro(float t,params Vector3[] posArray)
{
int l = posArray.Length; if (l<)
{
return Vector3.zero;
}
else if (l == )
{
return BaseBezier(t, posArray[], posArray[]);
}
else
{
Vector3[] tempArray = new Vector3[l-];
for (int i = ; i < l-; i++)
{
tempArray[i] = BaseBezier(t, posArray[i], posArray[i + ]);
}
return BezierPro(t,tempArray);
} }

  在unity里整合:

 using UnityEngine;
using System.Collections;
using System.Linq;
[ExecuteInEditMode]
public class Bezier : MonoBehaviour {
public LineRenderer line;
public Transform[] PosArray; [Range(,)]
public int sampleCount;
// Use this for initialization
void Start () { } // Update is called once per frame
void Update () {
SetBezier();
} //一阶
private Vector3 BaseBezier(float t,Vector3 pos0,Vector3 pos1)
{
return pos0 + t * (pos1-pos0);
}
//n阶
private Vector3 BezierPro(float t,params Vector3[] posArray)
{
int l = posArray.Length; if (l<)
{
return Vector3.zero;
}
else if (l == )
{
return BaseBezier(t, posArray[], posArray[]);
}
else
{
Vector3[] tempArray = new Vector3[l-];
for (int i = ; i < l-; i++)
{
tempArray[i] = BaseBezier(t, posArray[i], posArray[i + ]);
}
return BezierPro(t,tempArray);
} } [ContextMenu("设置贝塞尔曲线")]
private void SetBezier()
{
if (PosArray.Length<)
{
return;
}
Vector3[] tempArray = new Vector3[PosArray.Length]; for (int i = ; i < PosArray.Length; i++)
{
tempArray[i] = PosArray[i].position;
} line.SetVertexCount(sampleCount);
for (int i = ; i < sampleCount; i++)
{
line.SetPosition(i, BezierPro( (float)i/(float)sampleCount, tempArray) );
}
}
}

效果展示

贝塞尔(Bezier) 曲线 研究的更多相关文章

  1. Bezier(贝塞尔)曲线简介

    在计算机图形学中,Bezier曲线被广泛用于对平滑的曲线进行建模,对其有适当的了解是必要的.一条Bezier曲线由一系列控制点定义,称为曲线的阶数,由此可知,使用两个控制点()可以定义一条一阶Bezi ...

  2. 样条之贝塞尔(Bezier)

    我曾经发过两篇关于贝塞尔的文章:数学图形(1.47)贝塞尔(Bézier)曲线,数学图形之贝塞尔(Bézier)曲面.那是使用我自己定义的脚本语言生成贝塞尔图形.由于我自己定义的脚本语法功能有限,所以 ...

  3. 数学图形(1.47)贝塞尔(Bézier)曲线

    贝塞尔曲线又称贝兹曲线或贝济埃曲线,是由法国数学家Pierre Bézier所发现,由此为计算机矢量图形学奠定了基础.它的主要意义在于无论是直线或曲线都能在数学上予以描述. 上一节讲的是高次方程曲线, ...

  4. 曲线生成与求交—Bezier曲线

    Bezier曲线生成 法国工程师Pierre Bezier在雷诺公司使用该方法来设计汽车.一条Bezier曲线可以拟合任何数目的控制点. 公式 设\(n+1\)个控制点\(P_0,P_1--P_n\) ...

  5. Bezier曲线的原理 及 二次Bezier曲线的实现

    原文地址:http://blog.csdn.net/jimi36/article/details/7792103 Bezier曲线的原理 Bezier曲线是应用于二维图形的曲线.曲线由顶点和控制点组成 ...

  6. [摘抄] Bezier曲线、B样条和NURBS

    Bezier曲线.B样条和NURBS,NURBS是Non-Uniform Rational B-Splines的缩写,都是根据控制点来生成曲线的,那么他们有什么区别了?简单来说,就是: Bezier曲 ...

  7. C# 实现Bezier曲线(vs2008)

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  8. 连续bezier曲线的实现

    需求场景 一系列的坐标点,划出一条平滑的曲线 3次Bezier曲线 基本上大部分绘图工具都实现了3次Bezier曲线,4个点确定一条3次Bezier曲线.以html5中的canvas为例 let ct ...

  9. 7.5.5编程实例-Bezier曲线曲面绘制

    (a)Bezier曲线                         (b) Bezier曲面 1. 绘制Bezier曲线 #include <GL/glut.h> GLfloat ct ...

  10. 实验6 Bezier曲线生成

    1.实验目的: 了解曲线的生成原理,掌握几种常见的曲线生成算法,利用VC+OpenGL实现Bezier曲线生成算法. 2.实验内容: (1) 结合示范代码了解曲线生成原理与算法实现,尤其是Bezier ...

随机推荐

  1. Socket编程 之使用fsockopen()函数

    fsockopen函数:初始化一个套接字连接到指定主机(hostname) get方式: client.php <?php //创建连接 $fp=fsockopen('localhost',80 ...

  2. 别让持续交付自动化交付bug

    你的连续交付能力用得还好吗,比如频繁发布移动或云应用的特性增强?还是恰好相反,快速发布了带漏洞的版本? - Joel Shore 连续交付能让交付流程跑得更快,但连续交付本身并不能为发布质量打包票.国 ...

  3. 亚马逊VE账号运营

    VE劲爆内幕大揭秘!“仿牌+Amazon VE”跟卖之路 Amazon Vendor Express 是Amazon.com2015年下旬推出的新的供应商平台,商家通过这个平台可以把产品卖给Amazo ...

  4. 另类AOP设计

    常见的AOP设计都基于Remoting的RealProxy,或者基于Emit实现的动态代理,或者基于反射的Attribute扫描拦截.但是我们还有另类的拦截方案DynamicObject,只要我们继承 ...

  5. office-excel

    Excel打印每张纸都带表头 页面布局--->打印标题--->顶端标题行

  6. 延迟提交form

    提交按钮延迟提交form表单 function a(){document.getElementById('form1').submit();}setTimeout(a,5000);

  7. if-else语句

    C语言自学之if-else语句 Dome : 今年是2014年编写程序判断今年是闰年还是平年. 请在代码编辑器中使用简单if-else语句补全代码,判断今年是否是闰年. 运行结果: 今年是平年 #in ...

  8. ckeditor自定义插件--一键给所有的图片添加链接

    ckeditor自定义插件在网上查了查,感觉还是比较好用的,写了一个一键给编辑器中的所有图片添加链接. 在ckeditor目录下的plugins下建以插件为名的文件夹,在里边建plugin.js文件, ...

  9. vue-组件注册

    <div id="app-7"> <ol> <!-- 现在我们为每个 todo-item 提供 todo 对象 todo 对象是变量,即其内容可以是动 ...

  10. AIX详细查看用户/进程使用内存

    本文来自:https://blog.csdn.net/mydriverc2/article/details/41956063 问题描述:通过topas发现%comp内存已使用98% 问题分析: 1,从 ...