守望者--AIR技术交流

标题: 分享一个工具类 [打印本页]

作者: 破晓    时间: 2015-1-8 10:10
标题: 分享一个工具类
  1. package cn.util
  2. {
  3.         import flash.utils.ByteArray;

  4.         /**
  5.          *  此类搜集了一些算法源码
  6.          * @author 破晓
  7.          *
  8.          */        
  9.         public class Utils
  10.         {
  11.                 public function Utils()
  12.                 {
  13.                 }
  14.                
  15.                 /**
  16.                  * 编码转换
  17.                  * @param str
  18.                  * @param fromChar
  19.                  * @param toChar
  20.                  * @return
  21.                  *
  22.                  */               
  23.                 public static function stringTransform(str:String, fromChar:String, toChar:String):String
  24.                 {
  25.                         var byte:ByteArray = new ByteArray();
  26.                         byte.writeMultiByte(str, fromChar);
  27.                         byte.position = 0;
  28.                         
  29.                         return byte.readMultiByte(byte.length, toChar);
  30.                 }
  31.                
  32.                 /**
  33.                  *  编码转换
  34.                  * @param str
  35.                  * @param toChar
  36.                  * @return
  37.                  *
  38.                  */               
  39.                 public static function stringEncode(str:String, toChar:String):ByteArray
  40.                 {
  41.                         var byte:ByteArray = new ByteArray();
  42.                         byte.writeMultiByte(str, toChar);
  43.                         byte.position = 0;
  44.                         
  45.                         return byte;
  46.                 }
  47.                
  48.                 /**
  49.                  * 编码转换  
  50.                  * @param strSource
  51.                  * @param fromChar
  52.                  * @param toChar
  53.                  * @return
  54.                  *
  55.                  */               
  56.                 public static function stringSourceEncode(strSource:ByteArray, fromChar:String, toChar:String):ByteArray
  57.                 {
  58.                         var str:String = strSource.readMultiByte(strSource.bytesAvailable, fromChar);
  59.                         var byte:ByteArray = new ByteArray();
  60.                         byte.writeMultiByte(str, toChar);
  61.                         byte.position = 0;
  62.                         
  63.                         return byte;
  64.                 }
  65.                
  66.                 //****************************************************************
  67.                 //                                            随机数生成算法
  68.                 //****************************************************************
  69.                
  70.                 /**随机数种子*/
  71.                 private static const MAXRATIO:Number=1/(uint.MAX_VALUE+1);
  72.                 private static var _seed:uint;
  73.                 /**
  74.                  *  产生随机数
  75.                  * @return 随机数
  76.                  *
  77.                  */               
  78.                 public static function rand():Number
  79.                 {
  80.                         _seed^=(_seed<<21);
  81.                         _seed^=(_seed>>>35);
  82.                         _seed^=(_seed<<4);
  83.                         
  84.                         return _seed*MAXRATIO;
  85.                 }

  86.                 //****************************************************************
  87.                 //                                               位运算技巧
  88.                 //****************************************************************
  89.                
  90.                 /**
  91.                  *  将 base 乘以 2 的 pow 次方
  92.                  * @param base
  93.                  * @param pow
  94.                  * @return 将 base 乘以 2 的 pow 次方的结果
  95.                  *
  96.                  */               
  97.                 public static function getPow2(base:int, pow:int):int
  98.                 {
  99.                          if(pow > 0)
  100.                                 return base << pow;
  101.                         else
  102.                                 return base >> pow;
  103.                 }
  104.                
  105.                 /**
  106.                  * 将数字转换为整数
  107.                  * @param num
  108.                  * @return 整数
  109.                  *
  110.                  */               
  111.                 public static function numberToInteger(num:Number):int
  112.                 {
  113.                         return num >> 0;
  114.                 }
  115.                
  116.                 public static const RGB_TYPE:int = 24;
  117.                 public static const ARGB_TYPE:int = 32;
  118.                 /**
  119.                  * 提取颜色组成成分
  120.                  * @param color
  121.                  * @param type
  122.                  * @return {r, g, b} 或 {a, r, g, b}
  123.                  *
  124.                  */               
  125.                 public static function getColorInfo(color:uint, type:int=RGB_TYPE):Object
  126.                 {
  127.                         var obj:Object = {};
  128.                         if(type == RGB_TYPE)
  129.                         {
  130.                                 obj.r = color >> 16;
  131.                                 obj.g = color >> 8 & 0xFF;
  132.                                 obj.b = color & 0xFF;
  133.                         }
  134.                         else if(type == ARGB_TYPE)
  135.                         {
  136.                                 obj.a = color >>> 24;
  137.                                 obj.r = color >>> 16 & 0xFF;
  138.                                 obj.g = color >>> 8 & 0xFF;
  139.                                 obj.b = color & 0xFF;
  140.                         }
  141.                         
  142.                         return obj;
  143.                 }
  144.                
  145.                 /**
  146.                  * 合成颜色
  147.                  * @param r
  148.                  * @param g
  149.                  * @param b
  150.                  * @param a
  151.                  * @param type
  152.                  * @return  颜色
  153.                  *
  154.                  */               
  155.                 public static function buildColor(r:uint, g:uint, b:uint, a:uint=0, type:int=RGB_TYPE):uint
  156.                 {
  157.                         if(type == RGB_TYPE)
  158.                                 return r << 16 | g << 8 | b;
  159.                         else
  160.                                 return a << 24 | r << 16 | g << 8 | b;
  161.                 }
  162.                
  163.                 /**
  164.                  * 交换两个整数的值
  165.                  * @param a
  166.                  * @param b
  167.                  * @return {a, b}
  168.                  *
  169.                  */               
  170.                 public static function exchange(a:int, b:int):Object
  171.                 {
  172.                         a ^= b;
  173.                         b ^= a;
  174.                         a ^= b;
  175.                         
  176.                         return {a:a, b:b};
  177.                 }
  178.                
  179.                 /**
  180.                  * 自增(i++)
  181.                  * @param value
  182.                  * @return
  183.                  *
  184.                  */               
  185.                 public static function increment(value:int):int
  186.                 {
  187.                         return -~value;
  188.                 }
  189.                
  190.                 /**
  191.                  *  自减(i--)
  192.                  * @param value
  193.                  * @return
  194.                  *
  195.                  */               
  196.                 public static function decrement(value:int):int
  197.                 {
  198.                         return ~-value;
  199.                 }
  200.                
  201.                 /**
  202.                  * 返回相反数
  203.                  * @param value
  204.                  * @return 相反数
  205.                  *
  206.                  */               
  207.                 public static function flipping(value:int):int
  208.                 {
  209.                         return ~value + 1;  // 或 (value ^ -1) + 1
  210.                 }
  211.                
  212.                 /**
  213.                  * 判断是否为奇数
  214.                  * @param value
  215.                  * @return
  216.                  *
  217.                  */               
  218.                 public static function isEven(value:int):Boolean
  219.                 {
  220.                         return Boolean(value & 1);   
  221.                 }
  222.                
  223.                 /**
  224.                  * 返回绝对值
  225.                  * @param value
  226.                  * @return 绝对值
  227.                  *
  228.                  */               
  229.                 public static function abs(value:int):int
  230.                 {
  231.                         return (value ^ (value >> 31)) - (value >> 31);
  232.                 }
  233.                
  234.                 /**
  235.                  * 判断两个整数符号是否相同
  236.                  * @param a
  237.                  * @param b
  238.                  * @return
  239.                  *
  240.                  */               
  241.                 public static function comparingSign(a:int, b:int):Boolean
  242.                 {
  243.                         return a ^ b >= 0;
  244.                 }
  245.         }
  246. }
复制代码



作者: 破晓    时间: 2015-1-8 10:11
  1. /**
  2.                  * 判断无限循环小数
  3.                  * @param a 分子
  4.                  * @param b 分母
  5.                  *
  6.                  */               
  7.                 public static function check(a:Number, b:Number):void
  8.                 {
  9.                         while(a % 1 > 0 || b % 1 > 0)
  10.                         {
  11.                                 a *= 10;
  12.                                 b *= 10;
  13.                         }
  14.                         var y:int; // 余数
  15.                         y = a % b;
  16.                         
  17.                         var arr:Array = [];
  18.                         var count:int;
  19.                         while(true)
  20.                         {
  21.                                 if(y == 0)
  22.                                 {
  23.                                         trace("可以除尽,有限小数");
  24.                                         break;
  25.                                 }
  26.                                 if(arr.indexOf(y) >= 0)
  27.                                         break;
  28.                                 else
  29.                                         arr.push(y);
  30.                                 while(y < b) y *= 10;
  31.                                 y = y % b;
  32.                                 if(count++ > 1000) break;
  33.                         }
  34.                         
  35.                         trace(count, a/b, arr);
  36.                 }
复制代码

作者: 破晓    时间: 2015-1-8 10:11
  1. /**
  2.                  *  验证某个实例或类名是否从属于某个类
  3.                  * @param value  可以为类名或实例
  4.                  * @param clazz 类名
  5.                  * @return
  6.                  *
  7.                  */               
  8.                 public static function isBelongClass(value:*,clazz:Class):Boolean
  9.                 {
  10.                         value = getDefinitionByName(getQualifiedClassName(value));
  11.                         while(value != clazz)
  12.                         {
  13.                                 var className:String = getQualifiedSuperclassName(value);
  14.                                 if(className == "Object")
  15.                                 {
  16.                                         return false;
  17.                                 }
  18.                                 value = getDefinitionByName(className);
  19.                         }
  20.                         return true;
  21.                 }
复制代码

作者: 破晓    时间: 2015-1-8 10:11
  1. /**
  2.                  *  返回多边形面积
  3.                  * @param poly
  4.                  * @return
  5.                  *
  6.                  */               
  7.                 public static function getArea(poly:Array):Number {
  8.                         var n:int = poly.length;
  9.                         var surface:Number = 0;
  10.                         for (var i:int=0; i<n; i++) {
  11.                                 var j:int = (i+1) % n;
  12.                                 surface += Point(poly[i]).x * Point(poly[j]).y;
  13.                                 surface -= Point(poly[i]).y * Point(poly[j]).x;
  14.                         }
  15.                         surface=surface/2;
  16.                         return surface;
  17.                 }
  18.                
  19.                 public static function getArea2(poly:Array):Number {
  20.                         var area:Number = 0;
  21.                         if ( poly.length > 2) {
  22.                                 var sum:Number = 0;
  23.                                 var len:Number = poly.length - 1;
  24.                                 for (var i:int=0; i<len; i++) {
  25.                                         sum += (Point(poly[i]).x + Point(poly[i+1]).x) * (Point(poly[i+1]).y - Point(poly[i]).y);
  26.                                 }
  27.                                 sum += (Point(poly[i]).x + Point(poly[0]).x) * (Point(poly[0]).y - Point(poly[i]).y);
  28.                                 
  29.                                 area = - sum / 2;
  30.                         }
  31.                         return area;
  32.                 }
复制代码

作者: 破晓    时间: 2015-1-8 10:12
  1. /**
  2.      * 计算线段方位角
  3.      * @param p1
  4.      * @param p2
  5.      * @return
  6.      *
  7.      */               
  8.     public static function getAngle(p1:Point, p2:Point):Number
  9.     {
  10.       var tx:Number = p2.x - p1.x;
  11.       var ty:Number = p2.y - p1.y;
  12.       var k:Number = ty / tx;
  13.       var angle:Number = Math.atan(k);
  14.       if(tx < 0)
  15.         angle += Math.PI;
  16.       else if(ty < 0)
  17.         angle += (Math.PI + Math.PI);
  18.       if(angle < 0)
  19.         angle = Math.PI + Math.PI - angle;
  20.       return angle;
  21.     }
复制代码





欢迎光临 守望者--AIR技术交流 (http://www.airmyth.com/)