code: function Ellipse3D( x , y , z , nx , ny , nz , sx , sy , sz , semiMajor , semiMinor ) {
  	this.center = new Vector3D( x , y , z ) ;
  	this.planeNormal = new Vector3D( nx , ny , nz ).normalizeCheck() ;
  	this.majorAxis = new Vector3D( sx , sy , sz ).normalizeCheck() ;
  
  	this.semiMajor = + semiMajor ;
  	this.semiMinor = + semiMinor ;
  
  	// Mostly used to cache the result
  	this.focus1 = new Vector3D() ;
  	this.focus2 = new Vector3D() ;
  	this.c = 0 ;
  	this.e = 0 ;
  
  	this.r = null ;
  
  	this.update() ;
  }
docs: const utils = require( './utils.js' ) ; /*
  This is a circle with a major axis and semi-major and semi-minor length.
  
  Major axis and plane normal vectors MUST remain normalized!
  All constructors normalize them, but direct access should modify that with great care.
  
  Semi-major should be greater than semi-minor.