自定义ViewAndroid架构

自定义 view - 数学公式

2018-11-04  本文已影响26人  前行的乌龟

从来没有感觉到我是如此对不起党,对不起祖国的培养,对不起老师的辛辛教导,直到我再次碰到了 sin 、cos 、tan 时!如果老天再给我一次机会的话,我想说我要好好学数学

这是个噩梦,明明已经过去了的,但是为啥又再次遇到呢,还不是搞自定义 view 时算参数,啊啊啊啊,我想死啊,但是没办法啊,这些公式不会你就算不出参数来,没办法,再学一次吧,就当是重温高考了~


自定义 view 中涉及到以下几个公式:

这几个数学公式在使用 path 绘制时必然会碰到的,比如计算 path 莫个点的切角角度,x,y 坐标。虽说我们可能很久没有接触过了,但是也不难的,搞懂就行了

1. 什么是 sin ,con

以这个三角形为例


按照概念解释:

文字看不懂的话,看标准实例图也知道是啥意思了。sin ,con 的值在 -1 到 1 之间,Math 中的 sin 和 cos 也是如此,比如 API:

但是要注意啊,Math 中的 x 可不是角度,而是弧度,转换公式如下:

2. 什么是弧度

至于不知道弧度的同学,看图:


005Xtdi2jw1f1s0g3rcg2j308c0dw3yw.jpg

当这段弧长正好等于圆的半径时,两条射线的夹角大小为1弧度。所以 A-B 的弧线长度 / 半径 = 弧度了。详细可以查看:


公式用途

  1. sin 和 cos 的计算一般也就是知道一个边,角度算另一个边,比如:
a = Math.sin(x) * c
b = Math.con(x) * c 
  1. Math.acos 传入的参数是 邻边 / 斜边 的比值,获取是的弧度,用来计算角度的

  2. Math.atan2 是用来算 path 中某个点的切线角度的,场景是图片跟着 path 的方向转动指定角度

atan2 需要传2个参数:
Math.atan2(tan[1], tan[0])

其中tan[0]是邻边边长,也就是 point 点的 x 坐标;tan[1]是对边边长,也就是 point 点的 y 坐标
tan 的值可以用 PathMeasure.getPosTan 方法获取

写法如下:
private float[] pos = new float[2];   
private float[] tan = new float[2];
measure.getPosTan(length, pos, tan);  
float degrees = (float) (Math.atan2(tan[1], tan[0]) * 180.0 / Math.PI);

基本上面的就差不多了,再有请留言,我加上

参考文章:


上一篇下一篇

猜你喜欢

热点阅读