自定义 view - 数学公式

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

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


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

  • Math.sin - 正弦公式
  • Math.cos - 余弦公式
  • Math.acos() - 反余弦函数;
  • Math.atan2
  • Math.toDegrees() - 弧度转角度
  • Math.toRadians - 角度转弧度

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

1. 什么是 sin ,con

以这个三角形为例


按照概念解释:

  • sin 正弦,锐角对应的边与斜边的边
  • cos 余弦,锐角相邻的那条直角边与斜边的比
  • tan 正切,直角三角函数中,锐角对应的边跟另一条直角边的比

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

  • Math.sin(x)
  • Math.cos(x)

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

  • 弧度 = 角度 * Math.PI / 180
  • 角度 = 弧度 x 180 / Math.PI

2. 什么是弧度

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


005Xtdi2jw1f1s0g3rcg2j308c0dw3yw.jpg

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

  • 安卓自定义View基础-角度与弧度

公式用途

  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);

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

参考文章:


  • 安卓自定义View基础-角度与弧度
  • sin cos tan分别是什么意思
  • Math.sin() 与 Math.cos() 用法

你可能感兴趣的:(自定义 view - 数学公式)