package math {
/**
* @author orbito
*/
public class Matrix2D {
public var a : Number,
b : Number,
c : Number,
d : Number,
tx : Number,
ty : Number;
public function Matrix2D() : void {
this.a = 1;
this.b = 0;
this.c = 0;
this.d = 1;
this.tx = 1;
this.ty = 0;
}
public function get determinant() : Number {
return (a * d - b * c);
}
public function get position() : Vector2D {
return new Vector2D(tx, ty);
}
public function set position(a : Vector2D) : void {
tx = a.x;
ty = a.y;
}
public function translate(dx : Number = 0, dy : Number = 0) : void {
tx += dx;
ty += dy;
}
public function scale(sx : Number = 1, sy : Number = 1) : void {
a = a * sx;
b = b * sx;
c = c * sx;
d = d * sy;
tx = tx * sy;
ty = ty * sy;
}
public function rot(radians : Number) : void {
var m : Matrix2D = new Matrix2D;
m.a = m.d = Math.cos(radians);
m.c = Math.sin(radians);
m.b = -m.c;
deltaCombine(m);
}
public function deltaCombine(lhs : Matrix2D) : void {
var mat : Matrix2D = new Matrix2D;
mat.a = lhs.a * a + lhs.b * c;
mat.b = lhs.a * b + lhs.b * d;
mat.c = lhs.c * a + lhs.d * c;
mat.d = lhs.c * b + lhs.d * d;
deltaCopy(mat);
}
public function clone() : Matrix2D {
var mat : Matrix2D = new Matrix2D;
mat.copy(this);
return mat;
}
public function deltaCopy(mat : Matrix2D) : void {
a = mat.a;
b = mat.b;
c = mat.c;
d = mat.d;
}
public function copy(mat : Matrix2D) : void {
a = mat.a;
b = mat.b;
c = mat.c;
d = mat.d;
tx = mat.tx;
ty = mat.ty;
}
public function invert() : Boolean {
var mat : Matrix2D = new Matrix2D;
var det : Number = determinant;
if (det == 0) return false;
det = 1 / det;
mat.a = d * det;
mat.b = b * -det;
mat.c = c * -det;
mat.d = a * det;
mat.tx = (b * ty - d * tx) * det;
mat.ty = (c * tx - a * ty) * det;
copy(mat);
return true;
}
public function transformVector(v : Vector2D) : Vector2D {
return new Vector2D(v.x * a + v.y * b + tx, v.x * c + v.y * d + ty);
}
}
}
January 17, 2012
Matrice 2D en AS3
Comments Off
No Comments
No comments yet.
RSS feed for comments on this post.
Sorry, the comment form is closed at this time.