一、前言
最近在做一个类似VR看房的项目,我们在使用这些APP的时候,全景图片中都会一些点,我们可以点击这些点,到达相应的位置,我做的需求就是,计算半径范围内的点来展示,以及点和点之间的角度,为了保证数据的精度,点的坐标和角度都使用的是BigDecimal类。
二、Math三角函数方法
- Math.PI 代表180°对应的弧度,即3.1415926
- Math.sin() 正弦
- Math.cos() 余弦
- Math.tan() 正切
- 参数是一个弧度值,double类型,不是直接写角度
三、Math反三角函数方法
- Math.asin() 正弦
- Math.acos() 余弦
- Math.atan() 正切
- 参数是正切值或者斜率,斜率:也就是三角形中的对边比斜边的值。
- Math类中一个获取角度的方法:Math.toDegree(),参数是弧度值,可以是反函数的结果
四、项目实战代码
//角度计算
private BigDecimal degrees(BigDecimal x, BigDecimal z) {
//计算斜率,对边比斜边的值
double slope = x.divide(z, 5, BigDecimal.ROUND_HALF_UP).doubleValue();
//计算斜率对应的角的弧度
double radian = Math.atan(slope);
//计算弧度对应的角度
double degrees = Math.toDegrees(radian);
return BigDecimal.valueOf(degrees).setScale(5, BigDecimal.ROUND_HALF_UP);
}
BigDecimal类并没有计算角度之类的方法,目前我所采取的就是将其计算的时候转换为Double类型,使用Math类的三角函数方法进行计算