This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

code for implementing trigonometric calculation

HI Can anyone help me to implement trigonometric function in lpc2148 ?

Thanks

Parents
  • from the link, do you mean arctan, then

    
    //*****************************************************/
    // Fast arctan2
    //*****************************************************/
    float CHC_atan(float q, float i)
    {
        float angle, abs_q, r, extra;
    
        abs_q = fabs(q);
        if (i >= 0)
        {
            r = CHC_iMoreThan(abs_q, i);
            extra = 0.7853982f;
        }
        else
        {
            r = CHC_iLessThan(abs_q, i);
            extra = 2.3561945f;
        }
        angle = CHC_fast_atan_calc(r) + extra;
        if (q < 0) angle *= -1;
    
        return angle;
    }
    //-----------------------------------------------------
    
    //-----------------------------------------------------
    // allocated in hardware
    static inline float CHC_iMoreThan(float abs_q, float i)
    {
            return ((i - abs_q) / (i + abs_q));
    }
    //-----------------------------------------------------
    
    //-----------------------------------------------------
    // allocated in hardware
    static inline float CHC_iLessThan(float abs_q, float i)
    {
            return ((i + abs_q) / (abs_q - i));
    }
    //-----------------------------------------------------
    
    //-----------------------------------------------------
    // allocated in hardware
    static inline float CHC_fast_atan_calc(float r)
    {
            return (0.1963f * r * r * r - 0.9817f * r);
    }
    //*****************************************************/
    
    

Reply
  • from the link, do you mean arctan, then

    
    //*****************************************************/
    // Fast arctan2
    //*****************************************************/
    float CHC_atan(float q, float i)
    {
        float angle, abs_q, r, extra;
    
        abs_q = fabs(q);
        if (i >= 0)
        {
            r = CHC_iMoreThan(abs_q, i);
            extra = 0.7853982f;
        }
        else
        {
            r = CHC_iLessThan(abs_q, i);
            extra = 2.3561945f;
        }
        angle = CHC_fast_atan_calc(r) + extra;
        if (q < 0) angle *= -1;
    
        return angle;
    }
    //-----------------------------------------------------
    
    //-----------------------------------------------------
    // allocated in hardware
    static inline float CHC_iMoreThan(float abs_q, float i)
    {
            return ((i - abs_q) / (i + abs_q));
    }
    //-----------------------------------------------------
    
    //-----------------------------------------------------
    // allocated in hardware
    static inline float CHC_iLessThan(float abs_q, float i)
    {
            return ((i + abs_q) / (abs_q - i));
    }
    //-----------------------------------------------------
    
    //-----------------------------------------------------
    // allocated in hardware
    static inline float CHC_fast_atan_calc(float r)
    {
            return (0.1963f * r * r * r - 0.9817f * r);
    }
    //*****************************************************/
    
    

Children
  • actually

    //*****************************************************/
    // Fast arctan2 software implementation
    //*****************************************************/
    //float SW_atan(float q, float i)
    //{
    //    float angle, abs_q, r;
    //
    //    abs_q = fabs(q) + 1e-10;      // kludge to prevent 0/0 condition
    //    if (i >= 0)
    //    {
    //        r = (i - abs_q) / (i + abs_q);
    //        angle = 0.1963f * r * r * r - 0.9817f * r + 0.7853982f;
    //    }
    //    else
    //    {
    //        r = (i + abs_q) / (abs_q - i);
    //        angle = 0.1963f * r * r * r - 0.9817f * r + 2.3561945f;
    //    }
    //    if (q < 0) angle *= -1;
    //
    //    return angle;
    //}
    //*****************************************************/