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(点击下载),运行效果如下:

<图五>

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

Android 计算器(Calculator)三角函数默认角度计算相关推荐

  1. 计算器计算经纬距离_经纬度距离角度计算工具

    经纬度距离角度计算器是一款经纬度计算工具,该软件可以快速计算出航图上任意两点之间的距离和任意三点所成夹角的角度,准确性非常高,而且使用期开也很简单,用户只需要输入两个地点的经纬度软件就可以计算出标准的 ...

  2. Android 计算器解析(四): 完善计算功能

    转载请注明出处: http://blog.csdn.net/like_program/article/details/52006693 上一篇博客中,我们美化了计算器的界面.但是计算功能还有些瑕疵: ...

  3. github android 计算器,Android studio实现简单的计算器

    本文实例为大家分享了Android studio实现简单计算器的具体代码,供大家参考,具体内容如下 需求分析及概要设计 目的 开发一个简单的计算器App,使之能够完成加减乘除混合运算 工具及环境 使用 ...

  4. android计算器开发论文,基于Android计算器功能的实现毕业设计论文

    <基于Android计算器功能的实现毕业设计论文.doc>由会员分享,可免费在线阅读全文,更多与<基于Android计算器功能的实现毕业设计论文>相关文档资源请在帮帮文库(ww ...

  5. nonebot2聊天机器人插件3:计算器calculator

    nonebot2聊天机器人插件3:计算器calculator 1. 插件用途 2. 目录结构 3. 实现难点与解决方案 3.1 将字符串作为代码执行 3.2 正则过滤 4. 代码实现 5. 插件配图 ...

  6. Android SDCard操作(文件读写,容量计算)

    Android SDCard操作(文件读写,容量计算) android.os.Environment 提供访问环境变量 java.lang.Object android.os.Environment ...

  7. 【Android 应用开发】Android 返回堆栈管理 ( 默认启动模式 | 栈顶复用启动模式 | 栈内复用启动模式 | 单实例启动模式 | CLEAR_TOP 标识 )

    文章目录 I . 默认启动模式 ( standard ) II . 栈顶复用启动模式 ( singleTop ) III . 栈内复用启动模式 ( singleTask ) IV . 单实例启动模式 ...

  8. android中计算日期差,Android编程实现根据不同日期计算天数差的方法

    本文实例讲述了Android编程实现根据不同日期计算天数差的方法.分享给大家供大家参考,具体如下: Calendar cal1 = getCalendarFromDate(mStartDate); l ...

  9. halcon中如何生成椭圆_Halcon中关于角度计算和测量拟合的算子详解

    角度计算算子简介 1.计算直线与水平轴之间的夹角 angle_lx( : : Row1, Column1, Row2, Column2 : Angle) 角度计算方式:将直线看作向量(有方向性),以直 ...

最新文章

  1. [译] 沙箱中的间谍 - 可行的 JavaScript 高速缓存区攻击
  2. pytorch 实现openpose
  3. linux c atoi strtol 区别
  4. 关于浮点数的误差理解
  5. 输入监听_更适合混音师的声卡 精准控制 多设备监听真的方便
  6. JAVA——使用Spring Boot Scheduled时注入simple-robot Bot解决方案
  7. How to download BOM from ERP to CRM
  8. 内存中数据模型和大数据持久性
  9. 【C++ Primer | 16】std::move和std::forward、完美转发
  10. 下载量超1600万的热门开源 JavaScript 序列化包中被曝 RCE 漏洞
  11. asp access服装商城计算机设计网站作品
  12. 如何使用CineMatch的伪色指南功能来帮助评估图像
  13. jrtplib java,jrtplib 分包处理
  14. motrix下载没速度_再见迅雷!高颜值没广告的下载神器Motrix体验
  15. 光纤跳线如何选择?需要注意什么?
  16. 利用MATLAB实现WAV音频的LSB信息隐藏
  17. USB转52单片机下载串口的“转换芯片”MAX232与CH340G的区别
  18. 微信小程序输入框大全
  19. 电商导购网站遭淘宝打压 推广成本高成隐患
  20. UVA 10074 Take the Land dp/暴力+剪枝

热门文章

  1. 手把手教你软渲染 #2 - 两大直线算法
  2. 先锋商泰面试实习经历
  3. 计算机与科学论文模板,计算机科学与技论文格式模板.doc
  4. VNC Viewer方式的远程连接树莓派
  5. iOS 获取当前屏幕显示的viewcontroller
  6. 关于keil里调用arm_math.h库的一个问题
  7. 使用AT命令控制2G/4G模块注意事项
  8. 用python语言写了一套在线算命程序 ,精准度怎么样?可以来试试
  9. 1.无忧考吧———计算机等级考试系统
  10. 织梦安装,访问http://域名/install/index.php 出现空白页或Not Found 问题