whole_func_string: function(p, angle) {
  	    p = point(p);
              if (angle) p.rotate(point(this.x, this.y), angle);
              var dx = p.x - this.x;
  	    var dy = p.y - this.y;
              var result;
  	    if (dx === 0) {
  	        result = this.bbox().pointNearestToPoint(p);
                  if (angle) return result.rotate(point(this.x, this.y), -angle);
                  return result;
  	    }
  	    var m = dy / dx;
  	    var mSquared = m * m;
  	    var aSquared = this.a * this.a;
  	    var bSquared = this.b * this.b;
  	    var x = sqrt(1 / ((1 / aSquared) + (mSquared / bSquared)));
  
              x = dx < 0 ? -x : x;
  	    var y = m * x;
  	    result = point(this.x + x, this.y + y);
              if (angle) return result.rotate(point(this.x, this.y), -angle);
              return result;
          }
func_code_string: function(p, angle) {
  	    p = point(p);
              if (angle) p.rotate(point(this.x, this.y), angle);
              var dx = p.x - this.x;
  	    var dy = p.y - this.y;
              var result;
  	    if (dx === 0) {
  	        result = this.bbox().pointNearestToPoint(p);
                  if (angle) return result.rotate(point(this.x, this.y), -angle);
                  return result;
  	    }
  	    var m = dy / dx;
  	    var mSquared = m * m;
  	    var aSquared = this.a * this.a;
  	    var bSquared = this.b * this.b;
  	    var x = sqrt(1 / ((1 / aSquared) + (mSquared / bSquared)));
  
              x = dx < 0 ? -x : x;
  	    var y = m * x;
  	    result = point(this.x + x, this.y + y);
              if (angle) return result.rotate(point(this.x, this.y), -angle);
              return result;
          }
func_documentation_string: Find point on me where line from my center to point p intersects my boundary. @param {number} angle If angle is specified, intersection with rotated ellipse is computed.