Last updated July 29, 2009 14:27, by raindrop
IMDVector
public interface IMDVector{
int getDim();
float getElem(int n);
IMDVector normal();
IMDVector add(IMDVector v);
IMDVector sub(IMDVector v);
IMDVector mul(float a);
float length();
float square();
float innerProduct(IMDVector v);
IMDSquareTransform getMetric();
IMDVector subVector(int dim);
ICMDVector getCVector();
}
ICMDVector
public interface ICMDVector extends IMDVector{
void setElem(int index, float value);
void zero();
}
AMDVector
public mixin class AMDVector extends IMDVector{
override function length():Number{ Math.sqrt(square()) }
override function square():Number{
getMetric().innerProduct(this,this);
}
override function normal():IMDVector{ mul(1.0 / length()) }
override function innerProduct(v:IMDVector):Number{ getMetric().innerProduct(this, v) }
override function add(v:IMDVector):IMDVector{
MDVector{
dim: getDim()
elems: for(n in [0..getDim()-1]) getElem(n) + v.getElem(n)
}
}
override function sub(v:IMDVector):IMDVector{
MDVector{
dim: getDim()
elems: for(n in [0..getDim()-1]) getElem(n) - v.getElem(n)
}
}
override function mul(a:Number):IMDVector{
MDVector{
dim: getDim()
elems: for(n in [0..getDim()]) a * getElem(n)
}
}
override function subVector(dim:Integer):IMDVector{
MDVector{
dim: dim
elems: for(n in [0..dim - 1]) getElem(n)
}
}
override function toString ():String { "[ {for(n in [0..getDim()-1]) "{getElem(n)} " } ]" }
}
MDVector
public class MDVector extends AMDVector, ICMDVector{
public var dim: Integer ;
public var elems: Number[];
public var metric:IMDSquareTransform = MDIdentity{ dim: dim };
override function getDim(){ dim };
override function getElem(n: Integer):Number{ elems[n] }
override function setElem(n: Integer, value:Number){ elems[n] = value }
override function getMetric(){ metric }
override function zero(){
for( n in [0..dim-1]) elems[n] = 0;
}
override function getCVector():ICMDVector{
MDVector{
dim: dim
elems: for (elem in elems) elem
}
}
}





