skip to main |skip to sidebar

2008年1月31日

[AS3]拟柱体数值积分

/**
* 在[a, b]间的拟柱体数值积分。

* @param f 积分函数
* @param a 左界限
* @param b 右界限
* @return [a, b]间的定积分
*/

public static function cylinderInte(f:Function, a:Number, b:Number):Number {
var h:Number = b-a;
return (h/6)*(f(a) + 4*f( (a+b) / 2 ) + f(b));
}

2008年1月30日

加入 MXNA

今天我收到了来自 MXNA 的邮件,正式加入了 MXNA。

MXNA 是一个关于 Adobe 产品的 Blog 聚合,包含了大量的 RIA 的内容。

[AS3]辛普森数值积分

/**
* 在[a, b]间的辛普森数值积分
* @param f 积分函数
* @param a 左界限
* @param b 右界限
* @param n 分段数
* @return [a, b]间的定积分
*/

public static function simpsonInte(f:Function, a:Number, b:Number, n:int = 1024):Number {
n*=2;//2n => n
var h:Number = (b-a) / (n);
var x1:Number = 0;
var x2:Number = 0;
n--;//2n-1 => n
for(var i:int = 1; i i++*/) {
x1 += f(a + i*h);
i++;//i+1 => i
x2 += f(a + i*h);
}
return (h/3)*(f(a) + f(b) + 4*x1 + 2*x2);
}

2008年1月29日

[AS3]梯形数值积分

/**
* 在[a, b]间的梯形数值积分
* @param f 被积分函数
* @param a 左界限
* @param b 右界限
* @param n 分段数
* @return [a, b]间的定积分
*/

public static function trapezoidalInte(f:Function, a:Number, b:Number,n:int = 1024):Number {
var h:Number = (b-a) / n;
var result:Number = 0;
n--;//n-1 => n
for(var i:int = 1; i<n; i++) {
result += f(a + i*h);
}
return (h/2)*(f(a) + f(b) + 2*result);
}

2008年1月28日

[AS3]忽略符号的四舍五入

/**
* 忽略符号的四舍五入。
*
* AMath.rint(1.2) //-> 1
* AMath.rint(-1.2)//-> -1
* AMath.rint(1.7) //-> 2
* AMath.rint(-1.7)//-> -2

* @param v a Number
* @return Rounded Nuumber.
*/

public static function rint(v:Number):int {
if(v > 0) {
return int(v + 0.5);
}
if(v < 0) {
return -int(-v + 0.5);
}else{
return 0;
}
}

2008年1月27日

[AS3]截取 ByteArray 中某一范围的元素

/**
* 截取原始 ByteArray 中某一范围的元素构成的新 ByteArray
* 返回的 ByteArray 包括 start 元素以及从其开始到 end 元素(但不包括该元素)的所有元素。
*
* @param bytes 原始 ByteArray
* @param result 返回指针,如果为 null,将会创建新的 ByteArray
* @param start 开始下标,负数表示从后面开始数。
* @param end 结束下标,负数表示从后面开始数。
* @return result
*/

public static function slice(
bytes:ByteArray, result:IDataOutput = null,
start:int = 0, end:int = -1):IDataOutput
{
if(!bytes) {
throw new ArgumentError("Param: must not be null.");
}
var totalLength:int = bytes.length;
if(!result) result = new ByteArray();
if(start<0) start = totalLength + start;
if(end<0) end = totalLength + end;
var length:int = end - start + 1;
result.writeBytes(bytes, start, length);
return result;
}

2008年1月26日

[AS3]颜色反转滤镜

需要 IBitmapFilterFactory

package advancedflex.graphics.images.filters {

import flash.filters.BitmapFilter;
import flash.filters.ColorMatrixFilter;

/**
* 颜色反转工厂。
*

它是AFGL(Advanced Flex Graphics Library)的一部分。


*/
public class ReversesFilterFactory implements IBitmapFilterFactory {

/* The Reverses Matrix */
private static const $MATRIX:Array = [
-1, 0, 0, 0, 255,
0,-1, 0, 0, 255,
0, 0,-1, 0, 255,
0, 0, 0, 1, 0,
];

/**
* 创建滤镜。
* @return 滤镜。
*/
public function create():BitmapFilter {
return new ColorMatrixFilter($MATRIX);
}

/**
* 释放滤镜工厂占用的大内存,但实际上什么也不做。
* 调用后在调用其他方法时也不会发成错误。
*/
public function dispose():void {
//Do Nothing.
}

/**
* 返回 ReversesFilterFactory 对象,
* 它是与原始 ReversesFilterFactory 对象完全相同的副本。
* @return ReversesFilterFactory 对象。
*/
public function clone():IBitmapFilterFactory {
return new ReversesFilterFactory();
}

}
}