贝塞尔(Bezier) 曲线 研究
贝塞尔曲线最近经常接触到,今天研究了一下。
- 原理
关于它的原理,网上有很多。
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) 曲线 研究的更多相关文章
- Bezier(贝塞尔)曲线简介
在计算机图形学中,Bezier曲线被广泛用于对平滑的曲线进行建模,对其有适当的了解是必要的.一条Bezier曲线由一系列控制点定义,称为曲线的阶数,由此可知,使用两个控制点()可以定义一条一阶Bezi ...
- 样条之贝塞尔(Bezier)
我曾经发过两篇关于贝塞尔的文章:数学图形(1.47)贝塞尔(Bézier)曲线,数学图形之贝塞尔(Bézier)曲面.那是使用我自己定义的脚本语言生成贝塞尔图形.由于我自己定义的脚本语法功能有限,所以 ...
- 数学图形(1.47)贝塞尔(Bézier)曲线
贝塞尔曲线又称贝兹曲线或贝济埃曲线,是由法国数学家Pierre Bézier所发现,由此为计算机矢量图形学奠定了基础.它的主要意义在于无论是直线或曲线都能在数学上予以描述. 上一节讲的是高次方程曲线, ...
- 曲线生成与求交—Bezier曲线
Bezier曲线生成 法国工程师Pierre Bezier在雷诺公司使用该方法来设计汽车.一条Bezier曲线可以拟合任何数目的控制点. 公式 设\(n+1\)个控制点\(P_0,P_1--P_n\) ...
- Bezier曲线的原理 及 二次Bezier曲线的实现
原文地址:http://blog.csdn.net/jimi36/article/details/7792103 Bezier曲线的原理 Bezier曲线是应用于二维图形的曲线.曲线由顶点和控制点组成 ...
- [摘抄] Bezier曲线、B样条和NURBS
Bezier曲线.B样条和NURBS,NURBS是Non-Uniform Rational B-Splines的缩写,都是根据控制点来生成曲线的,那么他们有什么区别了?简单来说,就是: Bezier曲 ...
- C# 实现Bezier曲线(vs2008)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- 连续bezier曲线的实现
需求场景 一系列的坐标点,划出一条平滑的曲线 3次Bezier曲线 基本上大部分绘图工具都实现了3次Bezier曲线,4个点确定一条3次Bezier曲线.以html5中的canvas为例 let ct ...
- 7.5.5编程实例-Bezier曲线曲面绘制
(a)Bezier曲线 (b) Bezier曲面 1. 绘制Bezier曲线 #include <GL/glut.h> GLfloat ct ...
- 实验6 Bezier曲线生成
1.实验目的: 了解曲线的生成原理,掌握几种常见的曲线生成算法,利用VC+OpenGL实现Bezier曲线生成算法. 2.实验内容: (1) 结合示范代码了解曲线生成原理与算法实现,尤其是Bezier ...
随机推荐
- Socket编程 之使用fsockopen()函数
fsockopen函数:初始化一个套接字连接到指定主机(hostname) get方式: client.php <?php //创建连接 $fp=fsockopen('localhost',80 ...
- 别让持续交付自动化交付bug
你的连续交付能力用得还好吗,比如频繁发布移动或云应用的特性增强?还是恰好相反,快速发布了带漏洞的版本? - Joel Shore 连续交付能让交付流程跑得更快,但连续交付本身并不能为发布质量打包票.国 ...
- 亚马逊VE账号运营
VE劲爆内幕大揭秘!“仿牌+Amazon VE”跟卖之路 Amazon Vendor Express 是Amazon.com2015年下旬推出的新的供应商平台,商家通过这个平台可以把产品卖给Amazo ...
- 另类AOP设计
常见的AOP设计都基于Remoting的RealProxy,或者基于Emit实现的动态代理,或者基于反射的Attribute扫描拦截.但是我们还有另类的拦截方案DynamicObject,只要我们继承 ...
- office-excel
Excel打印每张纸都带表头 页面布局--->打印标题--->顶端标题行
- 延迟提交form
提交按钮延迟提交form表单 function a(){document.getElementById('form1').submit();}setTimeout(a,5000);
- if-else语句
C语言自学之if-else语句 Dome : 今年是2014年编写程序判断今年是闰年还是平年. 请在代码编辑器中使用简单if-else语句补全代码,判断今年是否是闰年. 运行结果: 今年是平年 #in ...
- ckeditor自定义插件--一键给所有的图片添加链接
ckeditor自定义插件在网上查了查,感觉还是比较好用的,写了一个一键给编辑器中的所有图片添加链接. 在ckeditor目录下的plugins下建以插件为名的文件夹,在里边建plugin.js文件, ...
- vue-组件注册
<div id="app-7"> <ol> <!-- 现在我们为每个 todo-item 提供 todo 对象 todo 对象是变量,即其内容可以是动 ...
- AIX详细查看用户/进程使用内存
本文来自:https://blog.csdn.net/mydriverc2/article/details/41956063 问题描述:通过topas发现%comp内存已使用98% 问题分析: 1,从 ...