Android 计算器(Calculator)三角函数默认角度计算 |
您所在的位置:网站首页 › arity官方下载 › Android 计算器(Calculator)三角函数默认角度计算 |
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 |