原文:
作者:world
链接:https://www.zhihu.com/question/27715729/answer/293563315
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

这个问题网上 《匀速贝塞尔曲线运动的实现》这篇文章有较完整的解答。不过不够详细,我结合Milo yip大神给出的参考文献详细说明下:大部分内容都来自这两篇文章,我只添加了自己的理解二次贝塞尔公式:

x坐标
X(t) = (1 - t)^2 * p0.x + 2t(1-t) * P1.x + t^2 * p2.x ---------------- (1)
y坐标
Y(t) = (1 - t)^2 * p0.y + 2t(1-t) * P1.y + t^2 * p2.y ---------------- (2)

化简(1) 得:

X(t) = (p2.x - 2p1.x + p0.x) * t^2 + (2p1.x - p0.x) * t + p0.x ---- (3)

同理,对y有(4)

为了方便计算, 令

(p2.x - 2p1.x + p0.x) = a.x ; (2p1.x - p0.x) = b.x

即,定义如下变量:

这步是为了(3), (4)表达式不要那么啰嗦.

至此,我们得到(x,y)坐标关于t 和给定点 p0, p1, p2的表达式

我们下一步希望得到移动距离相对于t的表达式

首先对 (3) , (4) 求导,得出在某个点处的瞬时速度:

B'x(t) = 2a.x*t + b.x
B'y(t) = 2a.y*t + b.y

根据平面距离公式,此时速度的大小 s(t) 为:

s(t) = sqrt( (B’x(t))^2 + (B’y(t) ^2) )
s(t) = sqrt( 4a.x^2 * t^2 + 4a.y^2 * t^2 + 4a.x*b.x + 4a.y * b.y + b.x^2 + b.y^2 )

为方便计算,令

s(t) = sart( At^2 + Bt +C)

至此,我们得到瞬时速度大小关于t 和给定点 p0, p1, p2的表达式长度就是对于瞬时速度的积分,所以求长度 L(t)即是对 s(t)做积分

感谢伟大的计算机科技,我找到了一个在线计算不定积分的网站:

不定积分计算器 : sqrt(axx+b*x+c)​zh.numberempire.com/integralcalculator.php?function=sqrt%28a%2Ax%2Ax%2Bb%2Ax%2Bc%29&var=x&answers=+positive+nonzero+negative

按照这里的计算:

注意这里算的是不定积分,按定积分算的话还要再减去一个 L(0)我没有验算这个过程,直接使用的《匀速贝塞尔曲线运动的实现》一文的计算结果:

原文下边这个显然法看不懂,谁看懂了麻烦告诉我…

*设t就是能够使L实现匀速运动的自变量,那么显然L(t)=L(1.0)t,即

从此处起,我按照Milo yip给出的文献继续进行。

对于游戏应用来说, 问题实际上是: 已知长度, 反求这个长度下的t , 这样我们可以匀速的滑动长度,求得t,然后再求得坐标

也就是说,已知长度 Distance, 记为D( 由于前边s被当成瞬时速度函数,所以不用这个字母) , 求 L(t) = D 下的 t

即:已知 L(t) 表达式, L’(t)表达式 (即前文瞬时速度表达式 s(t))
给定常数D, 令L(t) - D = 0 , 求 t 此问题可以用牛顿切线法近似求解

预估一个初始值x0, 对以下表达式迭代即可

关于《匀速贝塞尔曲线运动的实现》的过程推算相关推荐

  1. cocos匀速贝塞尔曲线运动

    cocos匀速贝塞尔曲线运动 const { ccclass, property } = cc._decorator;@ccclass export default class Expression ...

  2. 匀速贝塞尔曲线运动的实现(转)

    二次贝塞尔曲线通常以如下方式构建,给定二维平面上的固定点P0,P1,P2,用B(t)表示该条曲线 用一个动画来演示,可以更加清楚的表明这条曲线的构建过程 如果t变量本身线形变化的话,这条贝塞尔曲线本身 ...

  3. 匀速贝塞尔曲线运动的实现

    转自:https://www.iteye.com/blog/as3-865587 二次贝塞尔曲线通常以如下方式构建,给定二维平面上的固定点P0,P1,P2,用B(t)表示该条曲线 用一个动画来演示,可 ...

  4. java实现曲线运动_贝塞尔曲线 --匀速贝塞尔曲线运动的实现

    二次贝塞尔曲线通常以如下方式构建,给定二维平面上的固定点P0,P1,P2,用B(t)表示该条曲线 用一个动画来演示,可以更加清楚的表明这条曲线的构建过程 如果t变量本身线形变化的话,这条贝塞尔曲线本身 ...

  5. Unity3d 简单的小球沿贝塞尔曲线运动(适合场景漫游使用)

        简单的小球沿贝塞尔曲线运动,适合场景漫游使用 贝塞尔曲线:(贝塞尔曲线的基本想法部分摘自http://blog.csdn.net/u010019717/article/details/4768 ...

  6. html5绘制运动的图形,html5 canvas高级贝塞尔曲线运动动画

    canvas高级贝塞尔曲线运动动画 window.addEventListener('load',eventWindowLoaded,false);functioneventWindowLoaded( ...

  7. 匀速贝塞尔曲线路径规划工具

    在做游戏开发的时候经常会用到贝塞尔曲线来规划路径,在网上也没找到合适的demo,要么就是不支持高阶贝塞尔,要么就是不能匀速运动.所以决定趁着闲余时间自己写一个工具,方便以后用. 于是就有了该项目,并且 ...

  8. 研究贝塞尔曲线, 定距等分 ...

    https://en.wikipedia.org/wiki/Bézier_curve 贝塞尔曲线公式推导原理 https://www.cnblogs.com/equal/p/6414263.html ...

  9. 多视角探析贝塞尔曲线匀速化技术、实现及其应用

    概述 就在三年前,我于CSDN博客上发布了一篇题为<贝塞尔曲线运动n阶追踪方程的数学原理及其匀速化方法和应用>的博客文章,主要探讨的是贝塞尔曲线由一阶至n阶在数学层面的生成过程,以及匀速化 ...

最新文章

  1. 机器学习(1)机器学习基础 鸢尾花数据集
  2. 多视图立体匹配论文分享 | Fast-MVSNet (CVPR2020)
  3. 大创项目实施方案模板范文_27篇互联网电商创业计划书范文+34个电商行业商业计划书模板下载...
  4. 为什么我的文章总是没人回复
  5. javascript笔记---貌似大叔
  6. java事件处理机制(自定义事件)
  7. Golang json 解析与生成
  8. [Bzoj1597][Usaco2008 Mar]土地购买(斜率优化)
  9. 线性表的链式存储实现
  10. android 7.0 8.0 9.0 10.0修改默认输入法为谷歌输入法(RK MTK 展讯等平台都适用)
  11. 详谈PC端软件 - 加壳与脱壳
  12. 海马汽车经销商管理系统技术解析(四)保养管理
  13. vs code默认浏览器
  14. linux /etc/motd,Linux 修改进站提示 /etc/motd
  15. Apache ECharts 官网布局排版错乱的解决办法
  16. android 获取亮度,如何读取Android屏幕亮度/暗淡的实时,当前值?
  17. 从MapX到MapXtreme
  18. 国内商务邮箱哪个好用?电子邮箱怎么申请?
  19. 牛客小白月赛6 C.桃花
  20. 超导芯片应用计算机,带大家了解几个超导技术在生活中的实际应用张万三给大家超级超导材料技术,要找超导在...

热门文章

  1. 数据泵impdp上亿数据量的生产环境导入参考(完全本人总结,与公司机密无关)
  2. 钢结构高强螺栓设计程序
  3. 台式机作为文件服务器,台式机主机作为服务器
  4. HTML5+CSS大作业——节日圣诞节(5页)节日带背景音乐带视频(5页)带登录
  5. 做c4d计算机配置,C4D设计师电脑推荐配置
  6. CPU的典型故障剖析
  7. vCenter纳管ESXI主机出错
  8. ffplay flv mp4 转_手动视频转码教程,FFmpeg
  9. 深度学习(Deep Ritz,Galerkin,PINN)求解偏微分方程(PDE)实现代码地址
  10. 完美解决office安装程序失败提示:错误 1402无法打开键UNKNOWN\Components\xxx