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

  • 原理

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

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. React-native完整配置流程

    开头敲黑板!! 无论你是RN的新手还是老手,跟着流程走,RN项目搭建起来完全不是问题!   一.网址收集 expo配置网址:https://blog.expo.io/building-a-react- ...

  2. python的GIL

    GIL 是python的全局解释器锁,同一进程中假如有多个线程运行,一个线程在运行python程序的时候会霸占python解释器(加了一把锁即GIL),使该进程内的其他线程无法运行,等该线程运行完后其 ...

  3. 雷林鹏分享:解决CI框架的Disallowed Key Characters错误提示

    用CI框架时,有时候会遇到这么一个问题,打开网页,只显示 Disallowed Key Characters 错误提示.有人说 url 里有非法字符.但是确定 url 是纯英文的,问题还是出来了.但清 ...

  4. react state成员

    组件中包括state,props与render成员函数. react中,主要通过定义state,根据不同state渲染对应用户界面. 过程调用了成员函数setState(data,callback). ...

  5. HBase表数据的转移之使用自定义MapReduce

    目标:将fruit表中的一部分数据,通过MR迁入到fruit_mr表中 Step1.构建ReadFruitMapper类,用于读取fruit表中的数据 package com.z.hbase_mr; ...

  6. UIPath Level 2&3

    Level 3 走了很多弯路,但是学到了很多东西,贴一个Level3的吧,其他的省略了 认认真真独立做完Level3的两个POC,相信你对UIPath的理解会更深入一步 晚安,祝各位中秋节快乐!

  7. 浏览器与WEB服务器交互

    问题:打开浏览器,在地址栏输入url到页面展现,整个过程发生了什么? 图示: 步骤: 1 用户输入网址,包括协议和域名. 2 浏览器先查找自身缓存有没有记录,没有的话再找操作系统缓存. 3 当浏览器在 ...

  8. number类型精度分析

    numbe类型的可设置的取值范围: number无限定 number(6)是6位整数 number(6,2)是4位整数,精确到两位小数,最多6位.四舍五入 number(6,-2)是6位整数,精确到百 ...

  9. shutil

    import shutil#功能是将db文件中的内容拷贝到haha这个文件中去,但是haha原有的内容会被清空#shutil.copyfileobj(open('db','r',encoding='u ...

  10. 2072. Kirill the Gardener 3

    http://acm.timus.ru/problem.aspx?space=1&num=2072 回忆一下 #include <iostream> #include <st ...