anchor.diff:   * @param {Number} t interpolation amount between the two inputs
    * @returns {vec3} out
    */
  -Vector3 lerp (Vector3 a, Vector3 b, double t) {
  +Vector3 lerp(Vector3 a, Vector3 b, double t) {
     var out = new Vector3.zero();
     var ax = a[0],
         ay = a[1],
  
positive.code:     double oz = other.storage[2];
      return new Vector3(_y * oz - _z * oy, _z * ox - _x * oz, _x * oy - _y * ox);
    }
    
    /// Negate
    Vector3 operator-() => new Vector3(- storage[0], - storage[1], - storage[2]);
  
    /// Subtract two vectors.
    Vector3 operator-(Vector3 other) => new Vector3(storage[0] - other.storage[0],
                                           storage[1] - other.storage[1],
                                           storage[2] - other.storage[2]);
    /// Scale.
    Vector3 operator/(double scale) {
      var o = 1.0 / scale;
      return new Vector3(storage[0] * o, storage[1] * o, storage[2] * o);
    }
  
    /// Scale.
    Vector3 operator*(double scale) {
      var o = scale;
      return new Vector3(storage[0] * o, storage[1] * o, storage[2] * o);
    }
    
    double operator[](int i) => storage[i];
    void operator[]=(int i, double v) {
      storage[i] = v;
    }
    
    Vector3 operator+(Vector3 other) => clone().add(other);
    
    toString() {
      return "vec3($x, $y, $z)";
    }
  