Nonorientable (one-sided) Surfaces#
Moebius Strip#
The XML code for the example below can be found online in the DataXlCalcNet repository or in the corresponding local DataXlCalcNet folder in the files D01a_Moebius.3D.xml (D01a-c).
The example below uses the following code in C#
var a = 1.0;
var b = 1.0;
int m = 1;
var x = -(a + u * Math.Sin(m * v / 2)) * Math.Cos(v);
var y = (b + u * Math.Sin(m * v / 2)) * Math.Sin(v);
var z = 3 * (u / 2) * Math.Cos(v / 2);
See also: http://en.wikipedia.org/wiki/M%C3%B6bius_strip
Cross-Cap Surface#
The XML code for the example below can be found online in the DataXlCalcNet repository or in the corresponding local DataXlCalcNet folder in the files D02a_CrossCap.3D.xml (D02a-c).
See also: https://mathworld.wolfram.com/Cross-Cap.html
See also Wikipedia [1368], MathWorld [1070].
double su = Math.Sin(u);
double sv = Math.Sin(v);
double s2v = Math.Sin(2*v);
double cu = Math.Cos(u);
double cv = Math.Cos(v);
x = 0.5 * cu * s2v;
z = 0.5 * su * s2v;
y = 0.5 * (cv*cv - cu*cu * sv*sv);
Pseudo Cross-Cap Surface#
The XML code for the example below can be found online in the DataXlCalcNet repository or in the corresponding local DataXlCalcNet folder in the files D03a_PseudoCrossCap.3D.xml (D03a-c).
See also: https://mathworld.wolfram.com/Pseudocrosscap.html
See also: http://www.3d-meier.de/tut3/Seite51.html
See also Wikipedia [1368], MathWorld [1070].
double sv = Math.Sin(v);
double s2v = Math.Sin(2*v);
x = (1 - u*u) * sv;
y = (1 - u*u) * s2v;
z = u;
Roman Surface (or Steiner Surface)#
The XML code for the example below can be found online in the DataXlCalcNet repository or in the corresponding local DataXlCalcNet folder in the files D04a_Roman.3D.xml (D04a-c).
See also: https://mathworld.wolfram.com/RomanSurface.html
See also: https://en.wikipedia.org/wiki/Roman_surface
See also: http://paulbourke.net/geometry/steiner/
double r2 = 1;
double su = Math.Sin(u);
double sv = Math.Sin(v);
double cu = Math.Cos(u);
double cv = Math.Cos(v);
x = r2 * cu * su * sv;
y = r2 * cu * su * cv;
z = r2 * cu*cu * sv * cv;
Klein bagel#
The XML code for the example below can be found online in the DataXlCalcNet repository or in the corresponding local DataXlCalcNet folder in the files D05a_KleinBagel.3D.xml (D05a-c).
See also: https://en.wikipedia.org/wiki/Klein_bottle#The_figure_8_immersion
See also: https://mathworld.wolfram.com/KleinBottle.html
double r = 2.1;
x = (r + Math.Cos(u / 2) * Math.Sin(v) - Math.Sin(u / 2) * Math.Sin(2 * v)) * Math.Cos(u);
z = (r + Math.Cos(u / 2) * Math.Sin(v) - Math.Sin(u / 2) * Math.Sin(2 * v)) * Math.Sin(u);
y = Math.Sin(u / 2) * Math.Sin(v) + Math.Cos(u / 2) * Math.Sin(2 * v);
This is the ‘bagel’ form of a Klein bottle, a 4 dimensional object with a single surface (lacking ‘inside’ or ‘outside’), projected into 3-space as a self-intersecting solid.
Klein bottle#
The XML code for the example below can be found online in the DataXlCalcNet repository or in the corresponding local DataXlCalcNet folder in the files D06a_KleinBottle3.3D.xml (D06a-c).
See also: http://www.mapleprimes.com/maplesoftblog/95570-Klein-Bottle-Plot
See also: http://www.chebfun.org/examples/geom/ParametricSurfaces.html
See also: https://mathworld.wolfram.com/KleinBottle.html
double a = Math.Cos(u);
double b = Math.Sin(u);
double c = Math.Cos(v);
double a2 = a * a;
double a4 = a2 * a2;
x = -(2.0 / 15.0) * a * (3 * c + b * (-30 + a4 * (90 - 60 * a2) + 5 * a * c));
z = -(1.0 / 15.0) * b * b * (c * b * (3 - 48 * a4 + 5 * a * b * (1 - 16 * a4)) - 60);
y = -(2.0 / 15.0) * (3 + 5 * a * b) * Math.Sin(v);
3D Boy Surface, version 1#
The XML code for the example below can be found online in the DataXlCalcNet repository or in the corresponding local DataXlCalcNet folder in the files D07a_BoySurface.3D.xml (D07a-c).
See also: https://en.wikipedia.org/wiki/Boy%27s_surface
See also: http://mathworld.wolfram.com/BoySurface.html
double sqrt5 = Math.Sqrt(5);
// w = u*e^(iv)
double wr = Math.Cos(v);
double wi = Math.Sin(v);
Complex w = u * new Complex(wr, wi);
Complex w3 = w * w * w;
Complex w4 = w3 * w;
Complex w6 = w3 * w3;
Complex d = w6 + sqrt5 * w3 - 1;
Complex wa = w * (1 - w4) / d;
Complex wb = w * (1 + w4) / d;
Complex wc = (1 + w6) / d;
double g1 = -1.5 * wa.Imaginary;
double g2 = -1.5 * wb.Real;
double g3 = wc.Imaginary - 0.5;
double l2 = g1 * g1 + g2 * g2 + g3 * g3;
x = g1 / l2;
y = -g2 / l2;
z = g3 / l2;
3D Boy Surface, version 2#
The XML code for the example below can be found online in the DataXlCalcNet repository or in the corresponding local DataXlCalcNet folder in the files D08a_BoySurface2.3D.xml (D08a-c).
See also: https://en.wikipedia.org/wiki/Boy%27s_surface
See also: http://mathworld.wolfram.com/BoySurface.html
double sqrt2 = Math.Sqrt(2);
double s2v = Math.Sin(2 * v);
double cu = Math.Cos(u);
double cv = Math.Cos(v);
double cv2 = cv * cv;
double n1 = sqrt2 * cv2 * Math.Cos(2*u);
double xn = sqrt2 * cv2 * Math.Cos(2 * u) + cu * s2v;
double yn = sqrt2 * cv2 * Math.Sin(2 * u) - Math.Sin(u) * s2v;
double zn = 3 * cv2;
double d = 2 - sqrt2 * Math.Sin(3 * u) * s2v;
x = xn / d;
y = yn / d;
z = zn / d;
Morin Surface#
The XML code for the example below can be found online in the DataXlCalcNet repository or in the corresponding local DataXlCalcNet folder in the files D08a_BoySurface2.3D.xml (D09a-f).
// See also: http://www.3d-meier.de/tut3/Seite221.html // Morin Surface // See also: https://mathcurve.com/surfaces.gb/morin/morin.shtml // See also: https://en.wikipedia.org/wiki/Morin_surface // See also: Bednorz 2019
var k = 1.0;
var n = 3.0;
var Sqrt2 = Math.Sqrt(2);
var cu = Math.Cos(u);
var su = Math.Sin(u);
var K = cu / (Sqrt2 - k * Math.Sin(2 * u) * Math.Sin(n * v));
var x = K * (2 / (n - 1) * cu * Math.Cos((n - 1) * v) + Sqrt2 * su * Math.Cos(v));
var y = K * (2 / (n - 1) * cu * Math.Sin((n - 1) * v) - Sqrt2 * su * Math.Sin(v));
var z = K * cu;





























