Android之可伸缩的皮筋效果(贝塞尔曲线)的介绍
2015-11-15 15:15
211 查看
贝塞尔曲线
引言:
为什么我要写这篇关于贝塞尔曲线的博客,在android里面很多地方都用到了,比如当我们看到一个效果像橡皮筋拉伸一样,有弹性,一般就会用到贝赛尔曲线,不知道细心的你有没有发现,比如,我们看到QQ里面有那个红色的气泡的可以按着拖动,还有一些引导页里面几个点,我们滑动页面的时候,下面的几个点就想被挤压了,然后有一种被拖动的效果,还有就是我们做翻页的效果的时候要也会用到贝赛尔曲线。贝赛尔曲线简介:
贝塞尔曲线(Bézier curve),又称贝兹曲线或贝济埃曲线,是应用于二维图形应用程序的数学曲线。一般的矢量图形软件通过它来精确画出曲线,贝兹曲线由线段与节点组成,节点是可拖动的支点,线段像可伸缩的皮筋,Android提供的贝塞尔曲线绘制接口
在Android开发中,要实现贝塞尔曲线其实还是很简单的,因为Android已经给我们提供了相关接口,但此接口方法被藏的有点深,藏于Path类中。此方法如下:android.graphics.Path.quadTo(float x1, float y1, float x2, float y2) Since: API Level 1 参数说明: x1:操作点的x坐标 y1:操作点的y坐标 x2:结束点的x坐标 y2:结束点的y坐标 从API中看出,贝塞尔曲线从API-1就开始支持了。
线性公式
给定点P0、P1,线性贝兹曲线只是一条两点之间的直线。这条线由下式给出:
且其等同于线性插值。
二次方公式
二次方贝兹曲线的路径由给定点P0、P1、P2的函数B(t)追踪:
TrueType字型就运用了以贝兹样条组成的二次贝兹曲线。
三次方公式
P0、P1、P2、P3四个点在平面或在三维空间中定义了三次方贝兹曲线。曲线起始于P0走向P1,并从P2的方向来到P3。一般不会经过P1或P2;这两个点只是在那里提供方向资讯。P0和P1之间的间距,决定了曲线在转而趋进P3之前,走向P2方向的“长度有多长”。
曲线的参数形式为:
现代的成象系统,如PostScript、Asymptote和Metafont,运用了以贝兹样条组成的三次贝兹曲线,用来描绘曲线轮廓。
一般参数公式
阶贝兹曲线可如下推断。给定点P0、P1、…、Pn,其贝兹曲线即:
如上公式可如下递归表达: 用表示由点P0、P1、…、Pn所决定的贝兹曲线。
用平常话来说,阶的贝兹曲线,即双阶贝兹曲线之间的插值。
公式说明
1.开始于P0并结束于Pn的曲线,即所谓的端点插值法属性。
2.曲线是直线的充分必要条件是所有的控制点都位在曲线上。同样的,贝塞尔曲线是直线的充分必要条件是控制点共线。
3.曲线的起始点(结束点)相切于贝塞尔多边形的第一节(最后一节)。
4.一条曲线可在任意点切割成两条或任意多条子曲线,每一条子曲线仍是贝塞尔曲线。
5.一些看似简单的曲线(如圆)无法以贝塞尔曲线精确的描述,或分段成贝塞尔曲线(虽然当每个内部控制点对单位圆上的外部控制点水平或垂直的的距离为时,分成四段的贝兹曲线,可以小于千分之一的最大半径误差近似于圆)。
6.位于固定偏移量的曲线(来自给定的贝塞尔曲线),又称作偏移曲线(假平行于原来的曲线,如两条铁轨之间的偏移)无法以贝兹曲线精确的形成(某些琐屑实例除外)。无论如何,现存的启发法通常可为实际用途中给出近似值。
相关文章推荐
- Android图片加载框架比较----Glide,Picasso,Fresco
- Android中Service的基本理解和使用
- android97 播放音频 有进度条控制
- Android高手必学个性化控件之ListView
- Android最佳实践(译)
- Android Studio的使用(五)--导入第三方Jar包
- Android之Fragment
- Android LayoutInflater详解
- Android Drawable知识
- android 5.0(↑)获取最近运行的一个应用的包名
- android studio安装过程中常见错误
- Android 向左向右滑动销毁(finish)Activity, 随着手势的滑动而滑动的效果
- Android基础入门教程——8.4.1 Android动画合集之帧动画
- Android Studio的使用(四)--生成Get、Set方法
- Android之本地图片轮播(广告轮播)
- 初学Android项目:开发电子市场<第二天>下
- Android开源SegmentedBarView(医学、生化、健康指标统计常用)
- android TypedArray Empty after obtainStyledAttributes
- Android版本检测升级
- 支付宝支付--手机支付(转)