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

  • 原理

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

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. 【书】.NET及计算机类相关书籍,持续更新...

    一级目录 链接: https://pan.baidu.com/s/1y3osr3YCQ7XlM81RzkN1eQ 提取码: gs3r 二级目录 链接: https://pan.baidu.com/s/ ...

  2. Cordova入门系列(一)创建项目

    Cordova是什么? 初学Cordova的人,虽然了解一点点,知道Cordova是用来将html, css, js变成app的,但并不知道到底是怎么用的,原理是什么.经常会有这样的困惑: 它是一个可 ...

  3. Python函数分类及操作

    为什么使用函数? 答:函数的返回值可以确切知道整个函数执行的结果   函数的定义:1.数学意义的函数:两个变量:自变量x和因变量y,二者的关系                      2.Pytho ...

  4. 20190411wdVBA_排版

    Sub LayoutForExamPaper() Dim StartTime As Variant Dim UsedTime As Variant StartTime = VBA.Timer Appl ...

  5. scikit_learn lasso详解

    Lasso 回归 l1 正则化 The Lasso 是估计稀疏系数的线性模型. 它在一些情况下是有用的,因为它倾向于使用具有较少参数值的情况,有效地减少给定解决方案所依赖变量的数量. 因此,Lasso ...

  6. 找出点的密集区域,javascript实现,html5 canvas效果图

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  7. zzw原创_cmd下带jar包运行提示 “错误: 找不到或无法加载主类 ”

    在windows下编译java,由于是临时测试一下文件,不想改classpath,就在命令行中用 -cp 或classpath引入jar包,用javac编译成功,便使用java带-cp 或classp ...

  8. 新建ui文件及相应.h和.cpp文件

    1.在Qt Creator中新建一个任意的项目(如untitled): 2.在该项目中添加QT设计师界面类:   3.将新建的3个文件(.ui..h..cpp)拷贝到目标项目文件夹中: 4.分别在目标 ...

  9. ZYNQ DMA驱动及测试分析

    之前没有接触过DMA驱动.不了解它的原理,稍作学习先总结下dma驱动步骤: 1. 申请DMA中断. 2. 申请内存空间作为src和dts的空间. 3. 注册设备注册节点 4. 将申请到的src和dst ...

  10. sftp无法连接问题

    sftp连接linux 出现错误,就是服务器没有开sftp服务 解决:在linux服务器上,确保sftp定义在sshd的配置文件(一般为/etc/ssh/sshd_config)中:Subsystem ...