Android 计算器(Calculator)三角函数默认角度计算

您所在的位置:网站首页 arity官方下载 Android 计算器(Calculator)三角函数默认角度计算

Android 计算器(Calculator)三角函数默认角度计算

#Android 计算器(Calculator)三角函数默认角度计算| 来源: 网络整理| 查看: 265

Android计算器源码路径:alps/packages/apps/Calculator/

具体计算代码在 文件CalculatorExpressionEvaluator.java 函数evaluate

        try {             double result = mSymbols.eval(expr);             ...         } catch (SyntaxException e) {             callback.onEvaluate(expr, null, R.string.error_syntax);         }

最终具体实现在arity-2.1.2.jar,三角函数计算默认是弧度计算,如下图一

       

       

如果三角函数默认要以角度计算,要么重写,要么修改arity-2.1.2.jar(角度转弧度)!

本文采用后面一种方法,反编译修改arity-2.1.2.jar(*.class -> *.smali(修改注入)->*.class->替换arity-2.1.2.jar中的文件.class)

通过jd-gui打开arity-2.1.2.jar,具体三角函数实现在MoreMath.class中,如下图二

     

将Math.sin、Math.cos、Math.tan传入的参数转换下即可,有源码的情况修改起来很简单,修改现成的jar里的.class就相对复杂一些(需要用到baksmali.jar和smali.jar,具体请自行查阅Google、百度)。

关于角度转弧度,一起来温习下:

角度转弧度 π/180×角度 弧度变角度 180/π×弧度

在arity-2.1.2.jar中注入一个工具类(角度转弧度),如下图

为什么要新增一个类不是在MoreMath.class里改呢?原因是新增代码容易导致行错位,运行就有问题,尽量简单替换。

替换MoreMath.class里的sin、cos、tan函数如下:

     

通过jd-gui看*.class代码结构上有些乱,正常代码如下:

public static final double sin(double paramDouble) { return isPiMultiple(paramDouble) ? 0.0D : Math.sin(Deg2Rad.deg2Rad(paramDouble)); } public static final double cos(double paramDouble) { return isPiMultiple(paramDouble - 90D) ? 0.0D : Math.cos(Deg2Rad.deg2Rad(paramDouble)); } public static final double tan(double paramDouble) { return isPiMultiple(paramDouble) ? 0.0D : Math.tan(Deg2Rad.deg2Rad(paramDouble)); }

这样看起来就清晰了。

另外说明下函数 isPiMultiple 是针对 sin(n*π)、tan(n*π)、cos(n*π+π/2) 进行处理。

修改后的 arity-2.1.2.jar(点击下载),运行效果如下:

关于反编译相关知识就不在这里赘述了,谢谢~!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3