大家都知道Math类中有三角函数和反三角函数的公式,但笔者小白,在使用的Math类时候发现和我们正常数学不太一样,本篇就为记录Math类的三角函数已经反三角函数的使用:

Math:

举个三角函数的例子:

    /*** Returns the trigonometric sine of an angle.  Special cases:* <ul><li>If the argument is NaN or an infinity, then the* result is NaN.* <li>If the argument is zero, then the result is a zero with the* same sign as the argument.</ul>** <p>The computed result must be within 1 ulp of the exact result.* Results must be semi-monotonic.** @param   a   an angle, in radians.* @return  the sine of the argument.*/@FastNativepublic static native double sin(double a);

上面使我们经常会使用到的sin()正弦三角函数的Math源码;我们在数学中是填入一个角度值,又上面的注释我们可以看出,这里的参数是一个弧度,在使用时走了很多的误区:

double angle = 30 * Math.PI / 180;double sin = Math.sin(angle);double sin2=Math.sin(30);Log.e("TAG","sin---"+sin);Log.e("TAG","sin2---"+sin2);

下面是我log结果:

07-31 03:50:35.352 6034-6034/com.example.circle E/TAG: sin---0.49999999999999994sin2----0.9880316240928618

我们都知道sin(30(度)) 的值为0.5

可是在代码中无法体现角度单位,所以就用到了弧度,

double angle = 30 * Math.PI / 180;

这段代码就是将角度30度转换为弧度的公式,具体角度与弧度的转换公式如下图:

其他三角函数与sin()用法相同,这里就不做过多阐述了,至于反三角函数,看到这里大家就都能明白了,以前我们的数学公式得到的是角度,现在我们在代码中使用三角函数得到的自然就是弧度了,那么之后将弧度转换为角度即可,例如:

                   //根据坐标点求出当前触摸点与x轴的夹角float oldSweepAngle = (float) (Math.atan(y / x) * 180 / Math.PI);

上面的代码只是一个使用arctan() 反三角函数来根据(x,y)得出角度的简单例子,具体三角函数和反三角函数在代码中的实现大家只需要记住角度与弧度转换公式即可,下面插一个笔者做的一个自定义View的小Demo,其中使用到了简单的反三角函数

先看效果:

是一个环形的可实现拖动和点击更新进度的一个自定义View,类似于某些音乐播放软件调节音量的控件

public class MyCircle extends View {private int mHeight;private int mWidth;private int radio;private int mWeight;private float sweepAngle;public MyCircle(Context context) {this(context, null);}public MyCircle(Context context, @Nullable AttributeSet attrs) {this(context, attrs, 0);}public MyCircle(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);}@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh) {super.onSizeChanged(w, h, oldw, oldh);mWidth = w;mHeight = h;//外圆半径radio = mHeight / 2;//选中区域角度sweepAngle = 0f;}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);//设置画布的位置canvas.translate(mWidth / 2, mHeight / 2);//外圆画笔对象Paint paint = new Paint();paint.setColor(Color.GRAY);paint.setStyle(Paint.Style.FILL);//内圆画笔对象Paint wPaint = new Paint();wPaint.setColor(Color.WHITE);wPaint.setStyle(Paint.Style.FILL);//画外圆canvas.drawCircle(0, 0, radio, paint);//画选中的轮盘颜色Paint mPaint = new Paint();mPaint.setColor(Color.RED);mPaint.setAntiAlias(true);mPaint.setStyle(Paint.Style.FILL);RectF rectF = new RectF(-radio, -radio, radio, radio);canvas.drawArc(rectF, -90, sweepAngle, true, mPaint);//设定环的宽度mWeight = 40;//画內圆canvas.drawCircle(0, 0, radio - mWeight, wPaint);}@Overridepublic boolean onTouchEvent(MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:case MotionEvent.ACTION_MOVE://将下(x,y)移动至圆心,及现在的(0,0)float x = event.getX() - radio;float y = event.getY() - radio;//判断触摸点是否在环上if (x * x + y * y <= radio * radio && x * x + y * y >= (radio - mWeight) * (radio - mWeight)) {//根据坐标点求出当前触摸点与x轴的夹角float oldSweepAngle = (float) (Math.atan(y / x) * 180 / Math.PI);if (x > 0)//一四象限需要在原始角度上加90sweepAngle = oldSweepAngle + 90;else {//二三象限需要在原始角度上加270sweepAngle = oldSweepAngle + 270;}invalidate();}break;}return true;}
}

希望此篇文章对你有所帮助,不足之处还请大佬们提供宝贵意见!!!

Android中使用的三角函数与反三角函数相关推荐

  1. Android Studio计算器解决三角函数,反三角函数等

    文章目录 前言 一.XML布局 二.MainActivity 总结 1. 2. 3. 前言 需要设计一款通用计算器,包含基本的四则运算,还引入了括号,还要解决一些特殊的三角函数,反三角函数等,浏览了C ...

  2. C语言大数阶乘取余,python中math模块常用函数介绍 取模(取余)取绝对值 求阶乘 求最大公约数最小公倍数 取对数 取根号 取幂(取次方) 取整函数 三角函数与反三角函数...

    前提:import math 两个常用常量 e = 2.718281828459045 pi = 3.141592653589793 >>> import math >> ...

  3. Python数据分析 1-5 NumPy中ufunc函数(一)主要介绍NumPy中常用的通用函数:基本数学函数、三角函数和反三角函数和统计类函数

    1 引入NumPy #引入numpy import numpy as np np.__version__ '1.20.1' 2 基本数学函数 NumPy中基本数学函数有加法.减法.乘法.除法.乘方.开 ...

  4. 在Android中使用OpenGL ES开发第(五)节:GLSL基础语法

    一.前期基础储备 笔者之前的四篇文综述了Android中使用OpenGL ES绘制基本图形和实现了简单的相机预览,初次接触OpenGL ES开发的读者可能对其中新的概念比较迷惑,尤其是其中的顶点着色器 ...

  5. Madagascar的自定义浮点型函数--三角函数和反三角函数

    在Madagascar中,有自定义的浮点型的三角函数和反三角函数,它们都在头文件rfs.h中,形式如下: float cosf(float x); /*< float cos >*/flo ...

  6. android中实现更溜的字母导航索引

    现在讲一下今天要完成和前面android中字母导航和PinnedHeaderListView(listview头部固定)功能差不多,今天实现的功能是上篇的另一种实现方式,有兴趣的可以看一下 千言万语抵 ...

  7. 应用篇:三角函数与反三角函数的应用

    应用篇:三角函数与反三角函数的应用 应用篇:三角函数与反三角函数的应用 总结 转载需注明出处 应用篇:三角函数与反三角函数的应用 已知角度值,求该角度的斜率(tan)或正弦余弦值等三角函数值. 已知斜 ...

  8. android怎么用代码调图像,浅谈android中图片处理之图形变换特效Matrix(四)(示例代码)...

    今天,我们就来谈下android中图片的变形的特效,在上讲博客中我们谈到android中图片中的色彩特效来实现的.改变它的颜色主要通过ColorMatrix类来实现. 现在今天所讲的图片变形的特效主要 ...

  9. 浅谈android中图片处理之图形变换特效Matrix(四)

    今天,我们就来谈下android中图片的变形的特效,在上讲博客中我们谈到android中图片中的色彩特效来实现的.改变它的颜色主要通过ColorMatrix类来实现. 现在今天所讲的图片变形的特效主要 ...

最新文章

  1. s9.16作业,员工信息表
  2. eclipse - unresolved inclusion: stdio.h
  3. JQuery-UI组件化开发
  4. 《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一导读
  5. C Primer plus 后续学习环境配置
  6. RISC-V 能打 50 年!不必期待 RISC-VI —— 对话 RISC-V CTO Mark Himelstein
  7. 哟,2020 年了,用 Vue 做一个自己的小程序吧!| 原力计划
  8. eclipse不能自动编译工程的解决方法
  9. ios 监听数组个数的变化_iOS 监听数组的变化
  10. Linux通过Smb与Windows共享目录
  11. 关于:Google Chrome 官方下载地址
  12. 计算机辅助地理教学的利和弊,浅谈多媒体在高效地理课堂中的利和弊
  13. 微博三方登录账号注册
  14. 百度seo引流怎么做?一个免费分享知识的平台
  15. C语言并集编程,c语言求并集和交集的关键代码,谢谢
  16. 如何让服务端同时支持WebSocket和SSL加密的WebSocket(即同时支持ws和wss)?
  17. 我看凯立德GPS软件的规划问题
  18. Echarts的折线图堆叠示例,去掉线上小圆圈;多条折现可重叠。
  19. 关于LINUX系统netterm终端登陆乱码问题。
  20. Python如何安装模块,python模块安装失败的原因以及解决办法

热门文章

  1. 智能微信小程序加盟的5大源由掀起创业狂潮
  2. Gitlab 备份还原以及报错处理
  3. html实现好看的个人介绍,个人主页模板1(附源码)
  4. 【Linux】批量修改文件名
  5. 小清新、文艺风的Fin Market将首次在芭堤雅举办
  6. 把激光点投影到图像上并融合显示
  7. C/C++ 程序自删除
  8. 计算机设备非st上市公司,C39计算机、通信和其他电子设备制造业
  9. c++中头文件和源文件的区别
  10. html中鼠标经过遮罩消失,CSS遮罩层:hover状态丢失及解决方案