Spline3D = function(points, bernsteinPoly, tightness) {
            if (arguments.length === 1 && !is.Array(points) && is.Object(points)) {
              //if its an options object
              bernsteinPoly = bernsteinPoly || points.bernsteinPoly;
              tightness = tightness || points.tightness;
              points = points.points;
            }
            var i = 0,
              l;
            this.pointList = [];
            if (typeof tightness !== "number") {
              tightness = Spline3D.DEFAULT_TIGHTNESS;
            }
            this.setTightness(tightness);
            //this may be undefined
            this.bernstein = bernsteinPoly;
            if (points !== undefined) {
              for (i = 0, l = points.length; i < l; i++) {
                this.add(points[i].copy());
              }
            }
            this.coeffA = [];
            this.delta = [];
            this.bi = [];
            for (i = 0; i < this.numP; i++) {
              this.coeffA[i] = new Vec3D();
              this.delta[i] = new Vec3D();
              this.bi[i] = 0;
            }
            this.bi = [];
          }
@class
@member toxi
@param {Vec3D[]} points array of Vec3D's
@param {BernsteinPolynomial} [bernsteinPoly]