贝塞尔曲线是一种绘制曲线的方法,它的原理很简单:

以二阶贝塞尔曲线为例

如图,在p0,p1之间移动着一个点,我们先称之为a0,同样在p1,p2之间移动着一个点,我们称之为a1。他们需要满足的条件是这样的,在移动中,保证线段p0a0:p0p1=p1a1:p1p2=X

,这个比值X是从0到1逐渐变化的。

然后我们连接a0,a1,在线段a0a1上有一点b0,我们同样保证a0b0:a0a1=X;最后X从0到1变化的过程就是如图所显示的样子。这就是贝塞尔曲线。简单吧!

相对于更高阶的,原理一样,如果你有时间有耐心,函数很容易写出来的,这里只用二阶作为例子。

二阶函数点的位置可以这样计算

a0=p0+(p1-p0)*X;

a1=p1+(p2-p1)*X;

b0=a0+(a1-a0)*X;

这样我们根据p0,p1,p2的坐标就求出b0的坐标,b0的运动轨迹就是贝塞尔曲线。

三个公式最后得出:

b0=X*X*(p0+p2-2*p1)+2*X*(p1-p0)+p0

知道原理,接下来我们用unity3d实现起来就容易了。

代码如下:将脚本赋予一个空gameobject,并将新建的三个cube分别拖入对应空缺物体,运行游戏拖动物体就能看到贝塞尔曲线的变化。注意:这里只能在场景中拖动,不能在游戏视图中拖动,因为

Debug.DrawLine方法是只能在场景中显示的。

using UnityEngine;
using System.Collections;public class draw : MonoBehaviour {public GameObject v0, v1, a0;LineRenderer lineRenderer;//Vector3 v0, v1;//顶点//Vector3 a0;float jianxi = 0.05f;//绘制的0-1的间隙 越小曲线越接近曲线,// Use this for initializationvoid Start (){}// Update is called once per framevoid Update () {for(float i=0;i<1;i+=jianxi){Debug.DrawLine(po(i, v0, v1, a0), po(i + jianxi, v0, v1, a0), Color.red);Debug.DrawLine(v0.transform.position,a0.transform.position, Color.green);Debug.DrawLine(a0.transform.position, v1.transform.position, Color.green);}}private Vector3 po(float t,GameObject v0, GameObject v1, GameObject a0)//根据当前时间t 返回路径  其中v0为起点 v1为终点 a为中间点 {Vector3 a;a.x = t * t * (v1.transform.position.x - 2 * a0.transform.position.x + v0.transform.position.x) + v0.transform.position.x + 2 * t * (a0.transform.position.x - v0.transform.position.x);//公式为B(t)=(1-t)^2*v0+2*t*(1-t)*a0+t*t*v1 其中v0为起点 v1为终点 a为中间点 a.y = t * t * (v1.transform.position.y - 2 * a0.transform.position.y + v0.transform.position.y) + v0.transform.position.y + 2 * t * (a0.transform.position.y - v0.transform.position.y);a.z = t * t * (v1.transform.position.z - 2 * a0.transform.position.z + v0.transform.position.z) + v0.transform.position.z + 2 * t * (a0.transform.position.z - v0.transform.position.z);return a;}
}

unity3d项目资源可以点击 这里 下载

贝塞尔曲线绘制原理 unity 3d实现绘制贝塞尔曲线相关推荐

  1. 深入理解Flutter的图形图像绘制原理——图形库skia剖析

    Flutter是目前流行的高性能跨平台UI框架,图形库skia是其跨平台的基石.本文将深入分析skia的图形.字体.图片的渲染原理,如何挖掘硬件特性,为UI性能优化提供思路. 1. 引言 Flutte ...

  2. Unity 使用LineRenderer绘制贝塞尔曲线

    Unity 使用LineRenderer绘制贝塞尔曲线 LineRenderer介绍 LineRenderer线渲染器,在三维空间中渲染线段和曲线段. 贝塞尔曲线介绍 通过很少的控制点,生成复杂的平滑 ...

  3. java绘制三维曲线_使用JFreeChart绘制2D和3D折线图 | 学步园

    这是一个Web Project 首先是web.xml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schem ...

  4. unity 控制点 贝塞尔曲线_在Unity中使用贝塞尔曲线(转)

    鼎鼎大名的贝塞尔曲线相信大家都耳熟能详.这两天因为工作的原因需要将贝塞尔曲线加在工程中,那么MOMO迅速的研究了一下成果就分享给大家了哦.贝塞尔曲线的原理是由两个点构成的任意角度的曲线,这两个点一个是 ...

  5. 咸鱼菌玩3D—样条曲线和贝塞尔曲线

    咸鱼菌玩3D-样条曲线和贝塞尔曲线 多线段 样条曲线 贝塞尔曲线 123D提供了 多段线和 样条曲线两种自由绘制工具,而后者比前者更加灵活自由,能够绘制更复杂的形状. 在设计领域中有一种被称作 贝塞尔 ...

  6. iOS UI绘制原理

    高质量的图形展示在app的交互界面中扮演非常重要的角色.高质量的图形展示让用户更能喜欢使用它.iOS系统主要提供两种途径去创建高质量的图形:OpenGL或者使用原生Quarts.Core Animat ...

  7. java 贝塞尔曲线_贝塞尔曲线:原理、自定义贝塞尔曲线View、使用!!!

    一.原理 转自:http://www.2cto.com/kf/201401/275838.html Android动画学习Demo(3) 沿着贝塞尔曲线移动的Property Animation Pr ...

  8. OpenCASCADE绘制测试线束:几何命令之曲线创建

    OpenCASCADE绘制测试线束:几何命令之曲线创建 几何命令之曲线创建 point line circle ellipse hyperbola parabola beziercurve, 2dbe ...

  9. 基于VC++的3D地形绘制与纹理贴图

    前言 随着地理信息系统产业的发展,三维产品也在生活中处处吸引着我们的眼球.作为数字城市的核心内容,城市模型的构建成为了目前研究的热点.OpenGL是独立于操作系统和硬件环境的三维图形库,其为实现逼真的 ...

最新文章

  1. 2021入坑图像分割,我该从哪儿入手?
  2. shell 脚本定时创建月份表
  3. 知识图谱学习笔记-非结构化数据处理
  4. 常用的SSH注解标签
  5. 工作284:理解绑定逻辑
  6. CV Code | 本周计算机视觉新出开源代码汇总(含医学图像分割、神经架构搜索、姿态迁移、超分辨率等)...
  7. 5行python代码帮你搞定百度文库复制问题
  8. 如何在 win 10 上安装 IIS
  9. pyecharts查看版本_pyecharts 安装及使用指南
  10. 金融中需要的计算机知识,金融笔试中的综合知识一般会考什么?
  11. Python常用英文单词【最强总结】
  12. php一元二次方程求根,JavaScript_在线一元二次方程计算器实例(方程计算器在线计算),复制代码 代码如下:htmll - phpStudy...
  13. 《匆匆那年》的你,还记得吗?数学中的那些有(hui)趣(se)的定理(14)——毛球定理(Hairy ball theorem)
  14. 8×8二维载荷谱编制
  15. 快到假期了,还抢不到票?可以试试这两个工具
  16. freemarker 解析对象的某元素_FreeMarker标签介绍及各种数据类型处理
  17. Kitty中的动态线程池支持Nacos,Apollo多配置中心了
  18. CSS Doodle 生成器
  19. 商品价格变化监控记录方法
  20. 首份数据基础白皮书发布,直指未来基础设施痛点

热门文章

  1. Kee插件提示Open Kee Vault or KeePass to enable Kee的解决办法
  2. xilinx官网下载vivado等软件工具无法下载原因,报错:xilinx官网 由于您的帐号输出合规验证失败,我们无法满足您的请求。
  3. 腰椎间盘突出有哪些明显的症状
  4. HTML还可以放音乐,放视频(真的吗?)
  5. UI自动化测试AutoIT工具使用
  6. openGauss中Schema赋权小试
  7. 希尔排序----附图解(C语言)
  8. IIC详解以及SH367309-TWI示例应用
  9. 许昌一高2021年高考成绩查询,2021年许昌最好的高中排名,许昌重点高中升学率排名...
  10. Android 文件上传