I=(S=Uno.Vector = function(){
}).prototype;

S.Dot = function(a, b)
{
    return ((a.X * b.X) + (a.Y * b.Y)) + (a.Z * b.Z);
};

S.Length = function(v)
{
    return Math.sqrt(((v.X * v.X) + (v.Y * v.Y)) + (v.Z * v.Z));
};

S.Normalize = function(v)
{
    return Uno.Float3.operator_Div(v, Uno.Vector.Length(v));
};

S.Cross = function(left, right)
{
    return Uno.Float3.$1((left.Y * right.Z) - (left.Z * right.Y), (left.Z * right.X) - (left.X * right.Z), (left.X * right.Y) - (left.Y * right.X));
};

S.TransformCoordinate = function(vector, matrix)
{
    var tmp = Uno.Float4.$1((((vector.X * matrix.M11) + (vector.Y * matrix.M21)) + (vector.Z * matrix.M31)) + matrix.M41, (((vector.X * matrix.M12) + (vector.Y * matrix.M22)) + (vector.Z * matrix.M32)) + matrix.M42, (((vector.X * matrix.M13) + (vector.Y * matrix.M23)) + (vector.Z * matrix.M33)) + matrix.M43, (((vector.X * matrix.M14) + (vector.Y * matrix.M24)) + (vector.Z * matrix.M34)) + matrix.M44);
    return Uno.Float3.$1(tmp.X / tmp.W, tmp.Y / tmp.W, tmp.Z / tmp.W);
};
