守望者--AIR技术交流
标题:
分享一个工具类
[打印本页]
作者:
破晓
时间:
2015-1-8 10:10
标题:
分享一个工具类
package cn.util
{
import flash.utils.ByteArray;
/**
* 此类搜集了一些算法源码
* @author 破晓
*
*/
public class Utils
{
public function Utils()
{
}
/**
* 编码转换
* @param str
* @param fromChar
* @param toChar
* @return
*
*/
public static function stringTransform(str:String, fromChar:String, toChar:String):String
{
var byte:ByteArray = new ByteArray();
byte.writeMultiByte(str, fromChar);
byte.position = 0;
return byte.readMultiByte(byte.length, toChar);
}
/**
* 编码转换
* @param str
* @param toChar
* @return
*
*/
public static function stringEncode(str:String, toChar:String):ByteArray
{
var byte:ByteArray = new ByteArray();
byte.writeMultiByte(str, toChar);
byte.position = 0;
return byte;
}
/**
* 编码转换
* @param strSource
* @param fromChar
* @param toChar
* @return
*
*/
public static function stringSourceEncode(strSource:ByteArray, fromChar:String, toChar:String):ByteArray
{
var str:String = strSource.readMultiByte(strSource.bytesAvailable, fromChar);
var byte:ByteArray = new ByteArray();
byte.writeMultiByte(str, toChar);
byte.position = 0;
return byte;
}
//****************************************************************
// 随机数生成算法
//****************************************************************
/**随机数种子*/
private static const MAXRATIO:Number=1/(uint.MAX_VALUE+1);
private static var _seed:uint;
/**
* 产生随机数
* @return 随机数
*
*/
public static function rand():Number
{
_seed^=(_seed<<21);
_seed^=(_seed>>>35);
_seed^=(_seed<<4);
return _seed*MAXRATIO;
}
//****************************************************************
// 位运算技巧
//****************************************************************
/**
* 将 base 乘以 2 的 pow 次方
* @param base
* @param pow
* @return 将 base 乘以 2 的 pow 次方的结果
*
*/
public static function getPow2(base:int, pow:int):int
{
if(pow > 0)
return base << pow;
else
return base >> pow;
}
/**
* 将数字转换为整数
* @param num
* @return 整数
*
*/
public static function numberToInteger(num:Number):int
{
return num >> 0;
}
public static const RGB_TYPE:int = 24;
public static const ARGB_TYPE:int = 32;
/**
* 提取颜色组成成分
* @param color
* @param type
* @return {r, g, b} 或 {a, r, g, b}
*
*/
public static function getColorInfo(color:uint, type:int=RGB_TYPE):Object
{
var obj:Object = {};
if(type == RGB_TYPE)
{
obj.r = color >> 16;
obj.g = color >> 8 & 0xFF;
obj.b = color & 0xFF;
}
else if(type == ARGB_TYPE)
{
obj.a = color >>> 24;
obj.r = color >>> 16 & 0xFF;
obj.g = color >>> 8 & 0xFF;
obj.b = color & 0xFF;
}
return obj;
}
/**
* 合成颜色
* @param r
* @param g
* @param b
* @param a
* @param type
* @return 颜色
*
*/
public static function buildColor(r:uint, g:uint, b:uint, a:uint=0, type:int=RGB_TYPE):uint
{
if(type == RGB_TYPE)
return r << 16 | g << 8 | b;
else
return a << 24 | r << 16 | g << 8 | b;
}
/**
* 交换两个整数的值
* @param a
* @param b
* @return {a, b}
*
*/
public static function exchange(a:int, b:int):Object
{
a ^= b;
b ^= a;
a ^= b;
return {a:a, b:b};
}
/**
* 自增(i++)
* @param value
* @return
*
*/
public static function increment(value:int):int
{
return -~value;
}
/**
* 自减(i--)
* @param value
* @return
*
*/
public static function decrement(value:int):int
{
return ~-value;
}
/**
* 返回相反数
* @param value
* @return 相反数
*
*/
public static function flipping(value:int):int
{
return ~value + 1; // 或 (value ^ -1) + 1
}
/**
* 判断是否为奇数
* @param value
* @return
*
*/
public static function isEven(value:int):Boolean
{
return Boolean(value & 1);
}
/**
* 返回绝对值
* @param value
* @return 绝对值
*
*/
public static function abs(value:int):int
{
return (value ^ (value >> 31)) - (value >> 31);
}
/**
* 判断两个整数符号是否相同
* @param a
* @param b
* @return
*
*/
public static function comparingSign(a:int, b:int):Boolean
{
return a ^ b >= 0;
}
}
}
复制代码
作者:
破晓
时间:
2015-1-8 10:11
/**
* 判断无限循环小数
* @param a 分子
* @param b 分母
*
*/
public static function check(a:Number, b:Number):void
{
while(a % 1 > 0 || b % 1 > 0)
{
a *= 10;
b *= 10;
}
var y:int; // 余数
y = a % b;
var arr:Array = [];
var count:int;
while(true)
{
if(y == 0)
{
trace("可以除尽,有限小数");
break;
}
if(arr.indexOf(y) >= 0)
break;
else
arr.push(y);
while(y < b) y *= 10;
y = y % b;
if(count++ > 1000) break;
}
trace(count, a/b, arr);
}
复制代码
作者:
破晓
时间:
2015-1-8 10:11
/**
* 验证某个实例或类名是否从属于某个类
* @param value 可以为类名或实例
* @param clazz 类名
* @return
*
*/
public static function isBelongClass(value:*,clazz:Class):Boolean
{
value = getDefinitionByName(getQualifiedClassName(value));
while(value != clazz)
{
var className:String = getQualifiedSuperclassName(value);
if(className == "Object")
{
return false;
}
value = getDefinitionByName(className);
}
return true;
}
复制代码
作者:
破晓
时间:
2015-1-8 10:11
/**
* 返回多边形面积
* @param poly
* @return
*
*/
public static function getArea(poly:Array):Number {
var n:int = poly.length;
var surface:Number = 0;
for (var i:int=0; i<n; i++) {
var j:int = (i+1) % n;
surface += Point(poly[i]).x * Point(poly[j]).y;
surface -= Point(poly[i]).y * Point(poly[j]).x;
}
surface=surface/2;
return surface;
}
public static function getArea2(poly:Array):Number {
var area:Number = 0;
if ( poly.length > 2) {
var sum:Number = 0;
var len:Number = poly.length - 1;
for (var i:int=0; i<len; i++) {
sum += (Point(poly[i]).x + Point(poly[i+1]).x) * (Point(poly[i+1]).y - Point(poly[i]).y);
}
sum += (Point(poly[i]).x + Point(poly[0]).x) * (Point(poly[0]).y - Point(poly[i]).y);
area = - sum / 2;
}
return area;
}
复制代码
作者:
破晓
时间:
2015-1-8 10:12
/**
* 计算线段方位角
* @param p1
* @param p2
* @return
*
*/
public static function getAngle(p1:Point, p2:Point):Number
{
var tx:Number = p2.x - p1.x;
var ty:Number = p2.y - p1.y;
var k:Number = ty / tx;
var angle:Number = Math.atan(k);
if(tx < 0)
angle += Math.PI;
else if(ty < 0)
angle += (Math.PI + Math.PI);
if(angle < 0)
angle = Math.PI + Math.PI - angle;
return angle;
}
复制代码
欢迎光临 守望者--AIR技术交流 (http://www.airmyth.com/)