⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fixedpoint.java

📁 j2me简单实例,j2me教程加源码,希望大家喜欢
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
                        int k;                        n = -n;                        if ((n & (FIX_UNIT>>1)) != 0)                                k = (((n+FIX_UNIT)>>FIX_SHIFT)<<FIX_SHIFT);                        else                                k = (((n)>>FIX_SHIFT)<<FIX_SHIFT);                        return -k;                }// ~else        }/// END FUNC        /**        * @name sin        * @brief sine function value read from table        * @param x fixed point value [0..2PI]        * @return FixedPoint sine of x [0..1]        * @author Stellars Henson        */        public static final int sin(int x)        {                x = (x<<8)/(2*FIXED_PI+1);                return FIX_SIN[x & 0xff];        }/// END FUNC        /**        * @name cos        * @brief cosine function value read from table        * @param x fixed point value [0..2PI]        * @return FixedPoint cosine of x [0..1]        * @author Stellars Henson        */        public static final int cos(int x)        {                x = (x<<8)/(2*FIXED_PI+1);                return FIX_COS[x & 0xff];        }/// END FUNC        /**         * routinge returns FixedPoint angle         * for line binding the given point (x,y)         * and the point (0,0). The angle of 0         * is equal to x positive axis         * @name angle         * @brief calculates angle for given point         * @version 1.4         * @param x horizontal coord (FixedPoint)         * @param y vertical coord (FixedPoint)         * @author Stellars Henson         * @return angle FixedPoint [0..2PI]         */        public static final int angle( int x, int y ) {                /* prepare environment */                int sampleX = 0;                int sampleY = 0;                int sampleAngle = 0;                int xSign = 1;                int ySign = 1;                int angleSign = 1;                int angleOffset = 0;                boolean swapCoords = false;                /* special situations */                if( x == 0 && y == 0 )                        return 0;                /*                 * calculate in which of                 * eight fracts the point is.                 * move counterclockwise                 */                /* first quarter, x>0, y>0 */                if( x>=0 && y>=0 && x>=y ) {                        swapCoords = false;                        xSign = 1;                        ySign = 1;                        angleSign = 1;                        angleOffset = 0;                } else if( x>0 && y>0 && x<y ) {                        swapCoords = true;                        xSign = 1;                        ySign = 1;                        angleSign = -1;                        angleOffset = FIXED_HALFPI;                }// ~elseif                /* second quarter, x<0, y>0 */                else if( x<=0 && y>=0 && (-x)<=y ) {                        swapCoords = true;                        xSign = -1;                        ySign = 1;                        angleSign = 1;                        angleOffset = FIXED_HALFPI;                } else if( x<0 && y>0 && (-x)>y ) {                        swapCoords = false;                        xSign = -1;                        ySign = 1;                        angleSign = -1;                        angleOffset = FIXED_PI;                }// ~elseif                /* third quarter, x<0, y<0 */                else if( x<=0 && y<=0 && (-x)>=(-y) ) {                        swapCoords = false;                        xSign = -1;                        ySign = -1;                        angleSign = 1;                        angleOffset = FIXED_PI;                } else if( x<0 && y<0 && (-x)<(-y) ) {                        swapCoords = true;                        xSign = -1;                        ySign = -1;                        angleSign = -1;                        angleOffset = 3 * FIXED_HALFPI;                }// ~elseif                /* fourth quarter, x>0, y<0 */                else if( x>=0 && y<=0 && x<=(-y) ) {                        swapCoords = true;                        xSign = 1;                        ySign = -1;                        angleSign = 1;                        angleOffset = 3 * FIXED_HALFPI;                } else if( x>0 && y<0 && x>(-y) ) {                        swapCoords = false;                        xSign = 1;                        ySign = -1;                        angleSign = -1;                        angleOffset = 4 * FIXED_HALFPI;                }// ~elseif                /* calculate sample coords */                if( swapCoords == false ) {                        sampleX = xSign * x;                        sampleY = ySign * y;                }// ~if                else {                        sampleX = ySign * y;                        sampleY = xSign * x;                }// ~else                /* now, calculate the sample angle */                sampleAngle = FIX_ATAN[ (( Div(sampleY,sampleX) )>>8) & 0xff ];                /* and return the real angle */                return ( angleOffset + angleSign * sampleAngle );        }/// END FUNC        /**         * @name toString         * @brief translates fixedpoint value to String         * @param f fixedpoint value         * @return string reprezentation of fixedpoint         */        public static final String fpToStr(int f)        {                byte[] pow = gP;                byte[] acc = gA;                int digit, carry;                boolean neg;                StringBuffer sb = gB;                digit = 0;                do                        pow[digit] = acc[digit] = 0;                while (++digit < 21);                pow[9] = 1;                pow[10] = 5;                pow[11] = 2;                pow[12] = 5;                pow[13] = 8;                pow[14] = 7;                pow[15] = 8;                pow[16] = 9;                pow[17] = 0;                pow[18] = 6;                pow[19] = 2;                pow[20] = 5;                if (neg = f < 0)                        f = -f;                while (f != 0) {                        if ((f & 1) != 0) {                                digit = 20;                                carry = 0;                                do {                                        acc[digit] = (byte)(acc[digit] + pow[digit] + carry);                                        if (acc[digit] > 9) {                                                acc[digit] -= 10;                                                carry = 1;                                        }                                        else                                                carry = 0;                                }                                while (--digit >= 0);                        }                        digit = 20;                        carry = 0;                        do {                                pow[digit] = (byte)(pow[digit] + pow[digit] + carry);                                if (pow[digit] > 9) {                                        pow[digit] -= 10;                                        carry = 1;                                }                                else                                        carry = 0;                        }                        while (--digit >= 0);                        f >>>= 1;                }// ~while                sb.setLength(0);                if (neg)                        sb.append('-');                for (f = 0; f < 21 && acc[f] == 0; f++)                        ;                if (f > 4)                        sb.append('0');                for (digit = f; digit < 5; digit++)                        sb.append(acc[digit]);                for (f = 20; f >= 0 && acc[f] == 0; f--)                        ;                if (f > 4)                        sb.append('.');                for (digit = 5; digit <= f; digit++)                        sb.append(acc[digit]);                return sb.toString();        }/// END FUNC        /////////////////////////////////////////////////////////        /// Lookup tables                                     ///        /////////////////////////////////////////////////////////        /** Private */                /* sine values table */                private static final int[] FIX_SIN = {                        (int)(0.000000*FIX_UNIT), (int)(0.024541*FIX_UNIT), (int)(0.049068*FIX_UNIT), (int)(0.073565*FIX_UNIT),                        (int)(0.098017*FIX_UNIT), (int)(0.122411*FIX_UNIT), (int)(0.146730*FIX_UNIT), (int)(0.170962*FIX_UNIT),                        (int)(0.195090*FIX_UNIT), (int)(0.219101*FIX_UNIT), (int)(0.242980*FIX_UNIT), (int)(0.266713*FIX_UNIT),                        (int)(0.290285*FIX_UNIT), (int)(0.313682*FIX_UNIT), (int)(0.336890*FIX_UNIT), (int)(0.359895*FIX_UNIT),                        (int)(0.382683*FIX_UNIT), (int)(0.405241*FIX_UNIT), (int)(0.427555*FIX_UNIT), (int)(0.449611*FIX_UNIT),                        (int)(0.471397*FIX_UNIT), (int)(0.492898*FIX_UNIT), (int)(0.514103*FIX_UNIT), (int)(0.534998*FIX_UNIT),                        (int)(0.555570*FIX_UNIT), (int)(0.575808*FIX_UNIT), (int)(0.595699*FIX_UNIT), (int)(0.615232*FIX_UNIT),                        (int)(0.634393*FIX_UNIT), (int)(0.653173*FIX_UNIT), (int)(0.671559*FIX_UNIT), (int)(0.689541*FIX_UNIT),                        (int)(0.707107*FIX_UNIT), (int)(0.724247*FIX_UNIT), (int)(0.740951*FIX_UNIT), (int)(0.757209*FIX_UNIT),                        (int)(0.773010*FIX_UNIT), (int)(0.788346*FIX_UNIT), (int)(0.803208*FIX_UNIT), (int)(0.817585*FIX_UNIT),                        (int)(0.831470*FIX_UNIT), (int)(0.844854*FIX_UNIT), (int)(0.857729*FIX_UNIT), (int)(0.870087*FIX_UNIT),                        (int)(0.881921*FIX_UNIT), (int)(0.893224*FIX_UNIT), (int)(0.903989*FIX_UNIT), (int)(0.914210*FIX_UNIT),                        (int)(0.923880*FIX_UNIT), (int)(0.932993*FIX_UNIT), (int)(0.941544*FIX_UNIT), (int)(0.949528*FIX_UNIT),                        (int)(0.956940*FIX_UNIT), (int)(0.963776*FIX_UNIT), (int)(0.970031*FIX_UNIT), (int)(0.975702*FIX_UNIT),                        (int)(0.980785*FIX_UNIT), (int)(0.985278*FIX_UNIT), (int)(0.989177*FIX_UNIT), (int)(0.992480*FIX_UNIT),                        (int)(0.995185*FIX_UNIT), (int)(0.997290*FIX_UNIT), (int)(0.998795*FIX_UNIT), (int)(0.999699*FIX_UNIT),                        (int)(1.000000*FIX_UNIT), (int)(0.999699*FIX_UNIT), (int)(0.998795*FIX_UNIT), (int)(0.997290*FIX_UNIT),                        (int)(0.995185*FIX_UNIT), (int)(0.992480*FIX_UNIT), (int)(0.989177*FIX_UNIT), (int)(0.985278*FIX_UNIT),                        (int)(0.980785*FIX_UNIT), (int)(0.975702*FIX_UNIT), (int)(0.970031*FIX_UNIT), (int)(0.963776*FIX_UNIT),

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -