internal EllipsoidVisual3D(Ellipsoid ellipsoid, double pointRadius, double scaleFactor)
 {
     Requires.NotNull(ellipsoid, "ellipsoid");
     /* Generates ellipsoid using spherical coordinates (r, θ, φ) where 0 ≤ θ ≤ π, 0 ≤ φ ≤ 2π. */
     var points = new Point3D[GraticuleSpacingθ + 1, GraticuleSpacingφ + 1];
     for (var it = 0; it <= GraticuleSpacingθ; ++it) {
         for (var ip = 0; ip <= GraticuleSpacingφ; ++ip) {
             points[it, ip] = ellipsoid.GetSurfacePoint(it * Dθ, ip * Dφ);
             points[it, ip].X *= scaleFactor;
             points[it, ip].Y *= scaleFactor;
             points[it, ip].Z *= scaleFactor;
         }
     }
     BuildLatitudeLines(points, GraticuleSpacingθ + 1, GraticuleSpacingφ + 1);
     BuildLongitudeLines(points, GraticuleSpacingθ + 1, GraticuleSpacingφ + 1);
     BuildPoint(ellipsoid.Center, pointRadius, scaleFactor);
     foreach (var pole in ellipsoid.Poles) {
         BuildPoint(pole, pointRadius, scaleFactor);
     }
 }
 private void AddEllipsoid(Ellipsoid ellipsoid)
 {
     if (ellipsoid != null) {
         var ellipsoidVisual = new EllipsoidVisual3D(ellipsoid, PointRadius, ScaleFactor / _maxCoord);
         ViewPort.Children.Add(ellipsoidVisual);
         _ellipsoidVisual = ellipsoidVisual;
     }
 }
 private static object GetNonlinearForm(Ellipsoid feasibleSolution)
 {
     return new object();
 }