Robert的Math扩展类~wiyiflash总结
[ 2004-11-05 00:08:38 | 发布: N神 ]
有待研究,先收藏一下~
/*
Thanks Robert penner
Written by wiyiflash,Aug 2004
Welcome to http:\\www.wiyiflash.com\bbs
说明:ExtMath类扩展了Math类的功能,提供了一些方便使用的方法,在代码里有注释。
*/
class ExtMath extends Math {
//定义ExtMath的__proto__属性,使得它可以自然地继承Math的静态元素
static var __proto__:Object = Math;
//////////////////////////////////////////////////////////////////////
//计算两点间距离
static function distance(x1:Number, y1:Number, x2:Number, y2:Number) {
var dx = x2-x1;
var dy = y2-y1;
return Math.sqrt(dx*dx+dy*dy);
}
//角度转换为弧度
static function degreesToRadians(angle:Number) {
return angle*(Math.PI/180);
}
//弧度转换为度
static function radiansToDegrees(angle:Number) {
return angle*(180/Math.PI);
}
//------以度为参数的系列方法------
static function sinD(angle:Number) {
return Math.sin(angle*Math.PI/180);
}
static function asinD(ratio:Number) {
return Math.asin(ratio)*(180/Math.PI);
}
static function cosD(angle:Number) {
return Math.cos(angle*Math.PI/180);
}
static function acosD(ratio:Number) {
return Math.acos(ratio)*(180/Math.PI);
}
static function tanD(angle:Number) {
return Math.tan(angle*Math.PI/180);
}
static function atan2D(y:Number, x:Number) {
return Math.atan2(y, x)*(180/Math.PI);
}
//两条线的夹角
static function angleOfLine(x1:Number, y1:Number, x2:Number, y2:Number) {
return atan2D(y2-y1, x2-x1);
}
//将角度修正为360度象限内
static function fixAngle(angle:Number) {
return (angle %= 360)<0 ? angle+360 : angle;
}
//笛卡儿坐标转化为flash坐标
static function cartesianToFlash(o:Object) {
o._y *= -1;
o._rotation *= -1;
}
//flash坐标转化为笛卡儿坐标
static function flashToCartesian(o:Object) {
return cartesianToFlash(o);
}
//极坐标转化为笛卡儿坐标
static function cartesianToPolar(p:Object) {
//p={x,y};
var radius = Math.sqrt(p.x*p.x+p.y*p.y);
var theta = atan2D(p.y, p.x);
return {r:radius, t:theta};
}
//笛卡儿坐标转化为极坐标
static function polarToCartesian(p:Object) {
var x = p.r*cosD(p.t);
var y = p.r*sinD(p.t);
return {x:x, y:y};
}
}
/*
Thanks Robert penner
Written by wiyiflash,Aug 2004
Welcome to http:\\www.wiyiflash.com\bbs
说明:ExtMath类扩展了Math类的功能,提供了一些方便使用的方法,在代码里有注释。
*/
class ExtMath extends Math {
//定义ExtMath的__proto__属性,使得它可以自然地继承Math的静态元素
static var __proto__:Object = Math;
//////////////////////////////////////////////////////////////////////
//计算两点间距离
static function distance(x1:Number, y1:Number, x2:Number, y2:Number) {
var dx = x2-x1;
var dy = y2-y1;
return Math.sqrt(dx*dx+dy*dy);
}
//角度转换为弧度
static function degreesToRadians(angle:Number) {
return angle*(Math.PI/180);
}
//弧度转换为度
static function radiansToDegrees(angle:Number) {
return angle*(180/Math.PI);
}
//------以度为参数的系列方法------
static function sinD(angle:Number) {
return Math.sin(angle*Math.PI/180);
}
static function asinD(ratio:Number) {
return Math.asin(ratio)*(180/Math.PI);
}
static function cosD(angle:Number) {
return Math.cos(angle*Math.PI/180);
}
static function acosD(ratio:Number) {
return Math.acos(ratio)*(180/Math.PI);
}
static function tanD(angle:Number) {
return Math.tan(angle*Math.PI/180);
}
static function atan2D(y:Number, x:Number) {
return Math.atan2(y, x)*(180/Math.PI);
}
//两条线的夹角
static function angleOfLine(x1:Number, y1:Number, x2:Number, y2:Number) {
return atan2D(y2-y1, x2-x1);
}
//将角度修正为360度象限内
static function fixAngle(angle:Number) {
return (angle %= 360)<0 ? angle+360 : angle;
}
//笛卡儿坐标转化为flash坐标
static function cartesianToFlash(o:Object) {
o._y *= -1;
o._rotation *= -1;
}
//flash坐标转化为笛卡儿坐标
static function flashToCartesian(o:Object) {
return cartesianToFlash(o);
}
//极坐标转化为笛卡儿坐标
static function cartesianToPolar(p:Object) {
//p={x,y};
var radius = Math.sqrt(p.x*p.x+p.y*p.y);
var theta = atan2D(p.y, p.x);
return {r:radius, t:theta};
}
//笛卡儿坐标转化为极坐标
static function polarToCartesian(p:Object) {
var x = p.r*cosD(p.t);
var y = p.r*sinD(p.t);
return {x:x, y:y};
}
}

http://nshen.net/blog/blogview.asp?logID=140