I=(S=Uno.Plane = function(){
    this.Normal = new Uno.Float3;
    this.D = 0.0;
}).prototype;

I.ToString = function()
{
    return "Uno.Plane";
};

I.GetHashCode = function()
{
    return 0;
};

S.$0 = function(a, b, c, d) {
    var $this = new Uno.Plane;
    $this.Normal = Uno.Float3.$1(a, b, c);
    $this.D = d;
    return $this;
};

S.$1 = function(normal, d) {
    var $this = new Uno.Plane;
    $this.Normal = normal;
    $this.D = d;
    return $this;
};

S.$2 = function(point, normal) {
    var $this = new Uno.Plane;
    $this.Normal = normal;
    $this.D = -Uno.Vector.Dot(normal, point);
    return $this;
};

S.$3 = function(point1, point2, point3) {
    var $this = new Uno.Plane;
    var x1 = point2.X - point1.X;
    var y1 = point2.Y - point1.Y;
    var z1 = point2.Z - point1.Z;
    var x2 = point3.X - point1.X;
    var y2 = point3.Y - point1.Y;
    var z2 = point3.Z - point1.Z;
    var yz = (y1 * z2) - (z1 * y2);
    var xz = (z1 * x2) - (x1 * z2);
    var xy = (x1 * y2) - (y1 * x2);
    var invPyth = 1.0 / Math.sqrt(((yz * yz) + (xz * xz)) + (xy * xy));
    $this.Normal.X = yz * invPyth;
    $this.Normal.Y = xz * invPyth;
    $this.Normal.Z = xy * invPyth;
    $this.D = -((($this.Normal.X * point1.X) + ($this.Normal.Y * point1.Y)) + ($this.Normal.Z * point1.Z));
    return $this;
};
