从暴露年龄的屏保说起-贝塞尔曲线

这个屏保很多90后的朋友可能没见过,当年在windows刚普及不久的时候,很多人的电脑上的屏幕保护程序就是这个。 印象中这个屏保叫贝塞尔曲线,其中的每一条线都是一条贝塞尔曲线。 贝塞尔曲线就是今天的主题。 Android中很多地方都用到了贝塞尔曲线,像水波纹,手写板,这些地方都用到贝塞尔曲线。

什么是贝塞尔曲线

Bezier curve(贝塞尔曲线)是一种用数学描述任意曲线的方法。 它用不同的阶来描述曲线的复杂度,从一阶到高阶都有。 简单的说贝塞尔曲线由起点+终点+控制点组成, 一阶贝塞尔就是一条直线,二阶贝塞尔有起点终点和一个控制点组成,三阶则有两个控制点。 下面是一条二阶贝塞尔,B点就是控制点了。

贝塞尔曲线的原理

一条二阶贝塞尔曲线在起点,结束点,控制点都确定的情况下也就能确定,接下来要解释如何通过这三个点绘制一条贝塞尔曲线。 对于 Android来说我们只需要知道这三个点,就能通过Path.cubicTo这个方法绘制出一跳贝塞尔曲线,不需要关心其中的实现原理。

下面对原理解释一下, 一条曲线是由多个点连接起来的,绘制曲线的过程就是找这些点并连接起来的过程。 以A为起点,C为终点,B为控制点的话,要找绘制点,首先从A到B中间随意找一个点D,

A到D的距离和A到B的距离记百分比 P = AD : AB,

B到C上以 P 为同样的百分比找出点 E, BE : BC 应该和 AD : AB 相等,

然后连接DE,在DE上同样找到点F,满足条件 DF : DE = AD : AB = BE : BC = P,

这样就找到了绘制点F。

在B点不动的情况下不断的移动D点,我们就可以得到从A到C的贝塞尔曲线了。

如果想象不出来的话可以看wiki上的这个图,

Android实现

在Android上的实现非常简单,Path类已经帮我们完成了计算的过程, 它提供了几个方法分别用来描述贝塞尔曲线,对于二阶曲线来说用的是quadTo方法,三阶是cubicTo。 以二阶为例,

Path path = new Path();
path.moveTo(start.x, start.y);
path.quadTo(control1.x, control1.y, end.x, end.y);

这样就完成了一条二阶贝塞尔曲线的path,之后用 canvas.drawPath就可以画出来了。 效果图如下

原文发布于微信公众号 - Android每日一讲(gh_f053f29083b9)

原文发表时间:2018-08-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ATYUN订阅号

【实践】伪造名人的脸—做一个小示例了解生成式对抗网络

生成式对抗网络(GAN)的概念由Ian Goodfellow提出。Goodfellow使用了艺术评论家和艺术家的比喻来描述这两个模型比喻发生器和鉴别,它们组成了...

3974
来自专栏AI科技大本营的专栏

教程 | 用AI生成猫的图片,撸猫人士必备

编译 | 小梁 【AI科技大本营导读】我们身边总是不乏各种各样的撸猫人士,面对朋友圈一波又一波晒猫的浪潮,作为学生狗和工作狗的我们只有羡慕的份,更流传有“吸猫...

4759
来自专栏人工智能

kNN-Iris分类器(一)

“著名的鸢尾花(Iris)数据集(由Ronald Fisher于1936年发表)是一种展示机器学习框架API的好方法。从某种程度上说,Iris数据集是机器学习界...

43210
来自专栏ATYUN订阅号

只使用Numpy手动实现多层卷积神经网络(详解)

AiTechYun 编辑:yuxiangyu 在过去,我曾写过一篇关于“理解在最大池化层和转置卷积的反向传播”的文章。现在我想要使用这些知识做一个多层(或者说多...

3708
来自专栏大数据挖掘DT机器学习

R语言与机器学习(分类算法)支持向量机

说到支持向量机,必须要提到july大神的《支持向量机通俗导论》,个人感觉再怎么写也不可能写得比他更好的了。这也正如青莲居士见到崔颢的黄鹤楼后也...

3534
来自专栏新智元

吴恩达斯坦福CS230第一名:图像超级补全,效果惊艳(附代码)

【新智元导读】图像修复(Image inpainting)是一个已经被广泛研究的计算机视觉问题,即恢复图像中缺失的部分。斯坦福大学CS230课程的Mark Sa...

1403
来自专栏AI科技大本营的专栏

SVM大解密(附代码和公式)

写在之前 支持向量机(SVM),一个神秘而众知的名字,在其出来就受到了莫大的追捧,号称最优秀的分类算法之一,以其简单的理论构造了复杂的算法,又以其简单的用法实现...

1.2K9
来自专栏机器之心

资源 | MIT提出Matlab插件mNeuron:实现深度模型神经元的可视化

选自MIT 机器之心编译 参与:黄小天、Smith 近日,麻省理工学院(MIT)Antonio Torralba 等人发表了一篇题为《mNeuron:...

3686
来自专栏深度学习那些事儿

我的模型能跑多快——神经网络模型速度调研(一)

对于神经网络,我们更多谈的是其精度怎么样,有百分之零点几的提升。但是如果谈到速度的话,深度学习神经网络相比于传统的算法来说,速度恐怕没有那么快了。

5391
来自专栏机器之心

教程 | 百行代码构建神经网络黑白图片自动上色系统

4186

扫码关注云+社区

领取腾讯云代金券