给我三个点,还你一个平滑曲线

前言

给我一个支点,我可以撬起地球
给我三个点,还你一个平滑曲线

人人都可以写贝塞尔曲线,这个曲线还是位汽车工程师发明的,很有趣。

贝塞尔曲线有什么特点?

  • 可以平滑闭合
  • 可以直接通过公式获得从a点到b点之间任何位置点,点与点之间不相互依赖,却之间相互的积分几乎相同(相邻点有几乎相同的斜率,当相邻点斜率变化很大时表示他们不平滑)

公式很简单

x=0~1;
p = (1-x)*[(1-x)*a+x*b] + x*[(1-x)*b+x*c];
简化后公式为:
p = (1-x)²*a + 2*x*(1-x)*b + x²*c;
下面图表的公式就是
p = (1-t)²*p0 + 2*t*(1-t)*p1 + t²*p2;

这个公式通过三个点来确定一条曲线,曲线的起始和结束点分别是a和c,b作为曲线的控制点,曲线并不经过b。
这个公式可以用于运动,也可用于直接绘制形状


图片来自网络

一些经验

  • 你可以将缓动的因子做的随机,就可以实现不同的粒子,动画运动轨迹效果
  • 你也可以设计制作一根橡皮筋,当你拖拽的时候,你也能获取到精确到位置点,或者做出来一个圆圆的果冻,能够被拖拽或者和场景互动,发挥你的想象力。

参考
更高阶的贝塞尔曲线可以参考以下网站:
维基百科
https://en.wikipedia.org/wiki/Bézier_curve
百度词条
https://baike.baidu.com/item/贝塞尔曲线
扩展讲解
https://www.jianshu.com/p/55099e3a2899

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 谈谈贝塞尔曲线 最近在做项目的时候,需要用到一个动画,非常简单的动画,简单到就是直接对一个View做平移… 然而虽...
    雨润听潮阅读 6,159评论 1 16
  • 前言 近段时间我在工作中实现了一个动画功能,其中涉及到动画元素要按一定的轨迹在屏幕上移动,运动轨迹的生成我使用了P...
    Alexyz123阅读 6,715评论 0 11
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,659评论 25 709
  • 许久不动笔说些什么,再拾起笔怕也难逃硬式教育的后遗症,结束了众人各自印象中都最炎热的暑假,初到山大几个月,若说我...
    好大一个碗哟阅读 319评论 0 1
  • 一、简介 命令行有它的优势和使用场景 使用命令行可以让你更加熟悉编程语言的编译运行过程 但是作为软件开发人员,使用...
    SwordCoder阅读 59,393评论 1 10