Zum Inhalt springen

Datei:Hyperboloid ruled surface animation v2.gif

Seiteninhalte werden in anderen Sprachen nicht unterstützt.
Zur Beschreibungsseite auf Commons
aus Wikipedia, der freien Enzyklopädie

Hyperboloid_ruled_surface_animation_v2.gif (370 × 470 Pixel, Dateigröße: 9,87 MB, MIME-Typ: image/gif, Endlosschleife, 181 Bilder, 16 s)

Diese Datei und die Informationen unter dem roten Trennstrich werden aus dem zentralen Medienarchiv Wikimedia Commons eingebunden.

Zur Beschreibungsseite auf Commons


Beschreibung

 
Dieses Diagramm wurde mit Mathematica erstellt.
Beschreibung
English: An illustration of the the generation of a hyperboloid of revolution as the surface of revolution of a slanted line, also featuring all possible angles at which the line can be slanted to create a unique hyperboloid (thus including its two degenerate forms - a cone and an open cylinder).

This is the second version - the code has been cleaned up slightly and is now parallelized, and the bottom grid markings in the circle now spin as the slant changes as inspired by File:Cylinder - hyperboloid - cone.gif.

This may not necessarily be superior to the first version - the motion of the circle grid markings might distract from the change in the line's slant.
Datum
Quelle Eigenes Werk
Urheber Lemondoge
Andere Versionen
Quelltext
InfoField

Mathematica code

(* config *)
frames = 60;  (*frame count for first generation loop *)
offset = -Pi + 0.8; (* ensure favorable "alignment" *)
(* From the Mathematica stack exchange: 
https://mathematica.stackexchange.com/a/10958/89865; 
function by user Sjoerd C. de Vries; CC BY-SA 4.0 *)
splineCircle[m_List, r_, angles_List : {0, 2 \[Pi]}] := 
 Module[{seg, \[Phi], start, end, pts, w, k}, {start, end} = 
    Mod[angles // N, 2 \[Pi]];
   If[end <= start, end += 2 \[Pi]];
   seg = Quotient[end - start // N, \[Pi]/2];
   \[Phi] = Mod[end - start // N, \[Pi]/2];
   If[seg == 4, seg = 3; \[Phi] = \[Pi]/2];
   pts = 
    r RotationMatrix[start] . # & /@ 
     Join[Take[{{1, 0}, {1, 1}, {0, 1}, {-1, 1}, {-1, 
         0}, {-1, -1}, {0, -1}}, 2 seg + 1], 
      RotationMatrix[seg \[Pi]/2] . # & /@ {{1, 
         Tan[\[Phi]/2]}, {Cos[\[Phi]], Sin[\[Phi]]}}];
   If[Length[m] == 2, pts = m + # & /@ pts, 
    pts = m + # & /@ 
      Transpose[
       Append[Transpose[pts], ConstantArray[0, Length[pts]]]]];
   w = Join[
     Take[{1, 1/Sqrt[2], 1, 1/Sqrt[2], 1, 1/Sqrt[2], 1}, 
      2 seg + 1], {Cos[\[Phi]/2], 1}];
   k = Join[{0, 0, 0}, Riffle[#, #] &@Range[seg + 1], {seg + 1}];
   BSplineCurve[pts, SplineDegree -> 2, SplineKnots -> k, 
    SplineWeights -> w]] /; Length[m] == 2 || Length[m] == 3

k[a_, b_, t_] := a + (b - a)*t^3
f[u_, v_, 
  skew_ : 2 Pi/3] := {Cos[u + offset], Sin[u + offset], 
    1} (v) + {Cos[u + skew + offset], 
    Sin[u + skew + offset], -1} (1 - v)

borderWidth = -BorderDimensions[
     ParametricPlot3D[f[u, v, 2 Pi/3], {u, 0, 2 Pi}, {v, 0, 1}, 
      PlotRange -> {{-1, 1}, {-1, 1}, {-1, 1}}, Axes -> False, 
      Boxed -> False, ViewPoint -> {1.3, -3, 2}]] + 2;
(*generate table*)
hyperbList = 
  ParallelTable[
   ImagePad[Module[{p = 3 (j/frames)^2 - 2 (j/frames)^3},
     Show[
      ParametricPlot3D[f[u, v], {u, 0, p*2 Pi}, {v, 0, 1}, 
       ColorFunction -> 
        Function[{x, y, z, u}, 
         RGBColor[k[0.880722, 0, u*p], 0.611041, k[0.142051, 1, u*p], 
          1 - (u*p)^3]], Boxed -> False, Axes -> False, 
       ViewPoint -> {1.3, -3, 2}, 
       PlotRange -> {{-1, 1}, {-1, 1}, {-1, 1}}, 
       PlotPoints -> Ceiling[125 j/frames + 2],
       MeshFunctions -> {#5 &}],
      Graphics3D[{
        (* custom-bake the v mesh, and add other thingamabobbers *)
        GrayLevel[0.2],
        Table[
         Line[{f[2 Pi/16*i, 0], f[2 Pi/16*i, 1]}], {i, 1, 
          Floor[p*16]}],
        
        Thick, Blue,
        splineCircle[{0, 0 , 1}, 1],
        splineCircle[{0, 0, -1}, 1],
        
        Black,
        Line[{f[0, 0], f[0, 1]}],
        Line[{f[p*2 Pi, 0], f[p * 2 Pi, 1]}],
        PointSize[0.03],
        Point[{f[0, 0], f[0, 1]}],
        Point[{f[p*2 Pi, 0], f[p * 2 Pi, 1]}],
        
        GrayLevel[0.2],
        Line[{f[p*2 Pi, 1], {0, 0, 
           1}, {Cos[p*2 Pi + offset + 2 Pi/3], 
           Sin[p*2 Pi + offset + 2 Pi/3], 1}, f[p*2 Pi, 0]}],
        splineCircle[{0, 0, 1}, 
         1/4, {p*2 Pi + offset, p*2 Pi + offset + 2 Pi/3}],
        Line[{{0, 1, -1}, {0, -1, -1}}],
        Line[{{1, 0, -1}, {-1, 0, -1}}],
        Line[{{0, 0, 1}, {0, 0, -1}}]
        }]
      ]
     ], borderWidth], {j, 1, frames}];
(* add frame of u = 0 manually *)
PrependTo[hyperbList, ImagePad[Graphics3D[
    {Thick, Blue,
     splineCircle[{0, 0 , 1}, 1],
     splineCircle[{0, 0, -1}, 1],
     
     Black,
     Line[{f[0, 0], f[0, 1]}],
     PointSize[0.03],
     Point[{f[0, 0], f[0, 1]}],
     GrayLevel[0.2],
     
     Line[{f[0, 1], {0, 0, 1}, {Cos[offset + 2 Pi/3], 
        Sin[offset + 2 Pi/3], 1}, f[0, 0]}],
     splineCircle[{0, 0, 1}, 1/4, {offset, offset + 2 Pi/3}],
     Line[{{0, 1, -1}, {0, -1, -1}}],
     Line[{{1, 0, -1}, {-1, 0, -1}}],
     Line[{{0, 0, 1}, {0, 0, -1}}]
     },
    Boxed -> False, Axes -> False, 
    PlotRange -> {{-1, 1}, {-1, 1}, {-1, 1}}, 
    ViewPoint -> {1.3, -3, 2}],
   borderWidth]];
(* Show transition into cone *)
frames2 = 60;
AppendTo[hyperbList, 
  Splice @ParallelTable[
    ImagePad[Module[{p = 3 (j/frames2)^2 - 2 (j/frames2)^3},
      Show[
       ParametricPlot3D[
        f[u, v, (2 + p) Pi/3], {u, 0, 2 Pi}, {v, 0, 1}, 
        ColorFunction -> 
         Function[{x, y, z, u}, 
          RGBColor[k[0.880722, 0, u], 0.611041, k[0.142051, 1, u], 
           1 - (u)^3]], Boxed -> False, Axes -> False, 
        ViewPoint -> {1.3, -3, 2}, 
        PlotRange -> {{-1, 1}, {-1, 1}, {-1, 1}},
        PlotPoints -> 127,
        MeshFunctions -> {#5 &}],
       Graphics3D[{
         (* custom-bake the v mesh, and add other thingamabobbers *)
         GrayLevel[0.2],
         
         Table[Line[{f[2 Pi/16*i, 0, (2 + p) Pi/3], 
            f[2 Pi/16*i, 1, (2 + p) Pi/3]}], {i, 1, 16}],
         
         Thick, Blue,
         splineCircle[{0, 0 , 1}, 1],
         splineCircle[{0, 0, -1}, 1],
         
         Line[{f[2 Pi, 1, (2 + p) Pi/3], {0, 0, 
            1}, {Cos[offset + (2 + p) Pi/3], 
            Sin[offset + (2 + p) Pi/3], 1}, f[2 Pi, 0, (2 + p) Pi/3]}],
         
         splineCircle[{0, 0, 1}, 
          1/4, {2 Pi + offset, 2 Pi + offset + (2 + p) Pi/3}],
         
         Black,
         Line[{f[0, 0, (2 + p) Pi/3], f[0, 1, (2 + p) Pi/3]}],
         Line[{f[2 Pi, 0, (2 + p) Pi/3], f[2 Pi, 1, (2 + p) Pi/3]}],
         PointSize[0.03],
         Point[{f[0, 0, (2 + p) Pi/3], f[0, 1, (2 + p) Pi/3]}],
         Point[{f[2 Pi, 0, (2 + p) Pi/3], f[2 Pi, 1, (2 + p) Pi/3]}],
         
         GrayLevel[0.2],
         
         Line[{{Cos[p (Pi/3)], 
            Sin[p (Pi/3)], -1}, {-Cos[p (Pi/3)], -Sin[p (Pi/3)], -1}}],
         
         Line[{{Cos[p (Pi/3) + Pi/2], 
            Sin[p (Pi/3) + Pi/2], -1}, {-Cos[p (Pi/3) + Pi/2], -Sin[
              p (Pi/3) + Pi/2], -1}}],
         Line[{{0, 0, 1}, {0, 0, -1}}]
         }]
       ]
      ], borderWidth], {j, 1, frames2}]];
(* Show transition to cylinder *)
frames3 = 60;
AppendTo[hyperbList, 
  Splice @ParallelTable[
    ImagePad[Module[{p = 3 (j/frames3)^2 - 2 (j/frames3)^3},
      Show[
       ParametricPlot3D[
        f[u, v, (3 - 3 p) Pi/3], {u, 0, 2 Pi}, {v, 0, 1}, 
        ColorFunction -> 
         Function[{x, y, z, u}, 
          RGBColor[k[0.880722, 0, u], 0.611041, k[0.142051, 1, u], 
           1 - (u)^3]], Boxed -> False, Axes -> False, 
        ViewPoint -> {1.3, -3, 2}, 
        PlotRange -> {{-1, 1}, {-1, 1}, {-1, 1}},
        PlotPoints -> 127,
        MeshFunctions -> {#5 &}],
       Graphics3D[{
         (* custom-bake the v mesh, and add other thingamabobbers *)
         GrayLevel[0.2],
         
         Table[Line[{f[2 Pi/16*i, 0, (3 - 3 p) Pi/3], 
            f[2 Pi/16*i, 1, (3 - 3 p) Pi/3]}], {i, 1, 16}],
         
         Thick, Blue,
         splineCircle[{0, 0 , 1}, 1],
         splineCircle[{0, 0, -1}, 1],
         
         Line[{f[2 Pi, 1, (3 - 3 p) Pi/3], {0, 0, 
            1}, {Cos[offset + (3 - 3 p) Pi/3], 
            Sin[offset + (3 - 3 p) Pi/3], 1}, 
           f[2 Pi, 0, (3 - 3 p) Pi/3]}],
         
         splineCircle[{0, 0, 1}, 
          1/4, {offset, offset + (3 - 3 p) Pi/3}],
         
         Black,
         Line[{f[0, 0, (3 - 3 p) Pi/3], f[0, 1, (3 - 3 p) Pi/3]}],
         
         Line[{f[2 Pi, 0, (3 - 3 p) Pi/3], 
           f[2 Pi, 1, (3 - 3 p) Pi/3]}],
         PointSize[0.03],
         Point[{f[0, 0, (3 - 3 p) Pi/3], f[0, 1, (3 - 3 p) Pi/3]}],
         
         Point[{f[2 Pi, 0, (3 - 3 p) Pi/3], 
           f[2 Pi, 1, (3 - 3 p) Pi/3]}],
         
         GrayLevel[0.2],
         
         Line[{{Cos[(1 - 3 p) (Pi/3)], 
            Sin[(1 - 3 p) (Pi/
                3)], -1}, {-Cos[(1 - 3 p) (Pi/3)], -Sin[(1 - 3 p) (Pi/
                 3)], -1}}],
         
         Line[{{Cos[(1 - 3 p) (Pi/3) + Pi/2], 
            Sin[(1 - 3 p) (Pi/3) + 
              Pi/2], -1}, {-Cos[(1 - 3 p) (Pi/3) + 
               Pi/2], -Sin[(1 - 3 p) (Pi/3) + Pi/2], -1}}],
         Line[{{0, 0, 1}, {0, 0, -1}}]
         }]
       ]
      ], borderWidth], {j, 1, frames3}]];
Export["hyperboloidAnim2.gif", hyperbList, 
 "DisplayDurations" -> {1, Splice@ConstantArray[1/15, frames - 1], 1, 
   Splice@ConstantArray[1/15, frames2 - 1], 1, 
   Splice@ConstantArray[1/15, frames3 - 1], 1}]

Lizenz

Ich, der Urheber dieses Werkes, veröffentliche es unter der folgenden Lizenz:
Creative Commons CC-Zero Diese Datei wird unter der Creative-Commons-Lizenz CC0 1.0 Verzicht auf das Copyright zur Verfügung gestellt.
Die Person, die das Werk mit diesem Dokument verbunden hat, übergibt dieses weltweit der Gemeinfreiheit, indem sie alle Urheberrechte und damit verbundenen weiteren Rechte – im Rahmen der jeweils geltenden gesetzlichen Bestimmungen – aufgibt. Das Werk kann – selbst für kommerzielle Zwecke – kopiert, modifiziert und weiterverteilt werden, ohne hierfür um Erlaubnis bitten zu müssen.

Kurzbeschreibungen

Ergänze eine einzeilige Erklärung, was diese Datei darstellt.
An illustration of the the generation of a hyperboloid of revolution as the surface of revolution of a slanted line, also featuring all possible angles at which the line can be slanted to create a unique hyperboloid

In dieser Datei abgebildete Objekte

Motiv

image/gif

Dateiversionen

Klicke auf einen Zeitpunkt, um diese Version zu laden.

Version vomVorschaubildMaßeBenutzerKommentar
aktuell01:30, 17. Mai 2024Vorschaubild der Version vom 01:30, 17. Mai 2024370 × 470 (9,87 MB)LemondogeUploaded own work with UploadWizard

Keine Seiten verwenden diese Datei.