美文网首页自定义ViewAndroid架构
自定义 view - 数学公式

自定义 view - 数学公式

作者: 前行的乌龟 | 来源:发表于2018-11-04 00:44 被阅读26次

    从来没有感觉到我是如此对不起党,对不起祖国的培养,对不起老师的辛辛教导,直到我再次碰到了 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 的弧线长度 / 半径 = 弧度了。详细可以查看:


    公式用途

    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 - 数学公式

        本文链接:https://www.haomeiwen.com/subject/jfglxqtx.html