function EllipseOutlineGeometry(options) {
  options = options ?? Frozen.EMPTY_OBJECT;

  const center = options.center;
  const ellipsoid = options.ellipsoid ?? Ellipsoid.default;
  const semiMajorAxis = options.semiMajorAxis;
  const semiMinorAxis = options.semiMinorAxis;
  const granularity = options.granularity ?? CesiumMath.RADIANS_PER_DEGREE;

  //>>includeStart('debug', pragmas.debug);
  if (!defined(center)) {
    throw new DeveloperError("center is required.");
  }
  if (!defined(semiMajorAxis)) {
    throw new DeveloperError("semiMajorAxis is required.");
  }
  if (!defined(semiMinorAxis)) {
    throw new DeveloperError("semiMinorAxis is required.");
  }
  if (semiMajorAxis < semiMinorAxis) {
    throw new DeveloperError(
      "semiMajorAxis must be greater than or equal to the semiMinorAxis.",
    );
  }
  if (granularity <= 0.0) {
    throw new DeveloperError("granularity must be greater than zero.");
  }
  //>>includeEnd('debug');

  const height = options.height ?? 0.0;
  const extrudedHeight = options.extrudedHeight ?? height;

  this._center = Cartesian3.clone(center);
  this._semiMajorAxis = semiMajorAxis;
  this._semiMinorAxis = semiMinorAxis;
  this._ellipsoid = Ellipsoid.clone(ellipsoid);
  this._rotation = options.rotation ?? 0.0;
  this._height = Math.max(extrudedHeight, height);
  this._granularity = granularity;
  this._extrudedHeight = Math.min(extrudedHeight, height);
  this._numberOfVerticalLines = Math.max(
    options.numberOfVerticalLines ?? 16,
    0,
  );
  this._offsetAttribute = options.offsetAttribute;
  this._workerName = "createEllipseOutlineGeometry";
}
A description of the outline of an ellipse on an ellipsoid.

@alias EllipseOutlineGeometry
@constructor

@param {object} options Object with the following properties:
@param {Cartesian3} options.center The ellipse's center point in the fixed frame.
@param {number} options.semiMajorAxis The length of the ellipse's semi-major axis in meters.
@param {number} options.semiMinorAxis The length of the ellipse's semi-minor axis in meters.
@param {Ellipsoid} [options.ellipsoid=Ellipsoid.default] The ellipsoid the ellipse will be on.
@param {number} [options.height=0.0] The distance in meters between the ellipse and the ellipsoid surface.
@param {number} [options.extrudedHeight] The distance in meters between the ellipse's extruded face and the ellipsoid surface.
@param {number} [options.rotation=0.0] The angle from north (counter-clockwise) in radians.
@param {number} [options.granularity=0.02] The angular distance between points on the ellipse in radians.
@param {number} [options.numberOfVerticalLines=16] Number of lines to draw between the top and bottom surface of an extruded ellipse.

@exception {DeveloperError} semiMajorAxis and semiMinorAxis must be greater than zero.
@exception {DeveloperError} semiMajorAxis must be greater than or equal to the semiMinorAxis.
@exception {DeveloperError} granularity must be greater than zero.

@see EllipseOutlineGeometry.createGeometry

@example
const ellipse = new Cesium.EllipseOutlineGeometry({
  center : Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883),
  semiMajorAxis : 500000.0,
  semiMinorAxis : 300000.0,
  rotation : Cesium.Math.toRadians(60.0)
});
const geometry = Cesium.EllipseOutlineGeometry.createGeometry(ellipse);