J2ME里面的一些未实现的三角函数

2012-11-12
package com.ken.math;

/**
* 通过计算公式实现反正切、反正弦、反余弦

* Tan(X)=Sin(X)/Cos(x)

* ArcSin(X)=ArcTan(X/Sqrt(1-Sqr(X)))

* ArcCos(X)=ArcTan(Sqrt(1-Sqr(X))/X)

*
*
@author Ken_xu
*
@version 1.0 Copyright 2008-5-4 下午04:09:04
*/

public class SuperMath {
  
/**
      * 反正切

      * radian为正切值,这个函数的值域为-π/2~π/2
      *
      *
@param radian
      *             弧度为单位的角度
      *
@return 该角度所对应的反正切
      *
@author Ken_xu
     
*/

  
public static double actTan(double radian) {
        System.out.println(radian);
        
double retval = 0d;
        
if (Math.abs(radian) <= 1.0d) {
             retval
= radian / (1.0D + 0.28d * sqr(radian));
         }
else {
             retval
= -radian / (sqr(radian) + 0.28d);
            
if (radian < -1.0d) {
                 retval
= retval - Math.PI / 2;
             }
else {
                 retval
= retval + Math.PI / 2;
             }

         }

        
return retval;
     }


    
/**
      * 反正切

      * 正切值为y/x,因此该函数求的是y/x所对应的角,这个函数的值域为-π~π
      *
      *
@param y
      *
@param x
      *
@return 该角度所对应的反正切
      *
@author Ken_xu
     
*/

    
public static double actTan(double y, double x) {
        
if (y == 0.0d && x == 0.0d)
            
return 0.0d;
        
if (x > 0.0d)
            
return actTan(y / x);
        
if (x < 0.0F)
            
if (y < 0.0d)
                
return (-(Math.PI - actTan(y / x)));
            
else
                
return (Math.PI - actTan(-y / x));
        
return y >= 0.0F ? Math.PI / 2 : Math.PI / 2;
     }


    
/**
      * 反正弦
      *
      *
@param radian
      *             弧度为单位的角度
      *
@return 该角度所对应的反正弦
      *
@author Ken_xu
     
*/

    
public static double actSin(double radian) {
        
// ArcSin(X)=ArcTan(X/Sqrt(1-Sqr(X)))
        double retval = actTan(radian / Math.sqrt(1 - sqr(radian)));
        
return retval;
     }


    
/**
      * 反余弦
      *
      *
@param radian
      *             弧度为单位的角度
      *
@return 该角度所对应的反余弦
      *
@author Ken_xu
     
*/

    
public static double actCos(double radian) {
        
// ArcCos(X)=ArcTan(Sqrt(1-Sqr(X))/X)
        double retval = actTan(Math.sqrt(1 - sqr(radian)) / radian);
        
return retval;
     }


    
/**
      * 平方函数
      *
      *
@param x
      *
@return 平方值( x * x )
      *
@author Ken_xu
     
*/

    
public static double sqr(double x) {
        
return x * x;
     }

}

分享到:
0
相关阅读
友情链接
© 2018 我考网 http://www.woexam.com 中国互联网举报中心 湘ICP备18023104号 京公网安备 11010802020116号
违法和不良信息举报:9447029@qq.com