ROOT logo

From $ROOTSYS/tutorials/gl/glparametric.C

// Show rendering of parametric surfaces.
// Author: Timur Pocheptsov
void glparametric()
{
   // A parametric surface is defined by three functions:
   // S(u, v) : {x(u, v), y(u, v), z(u, v)}.
   // To create parametric surface and draw it one has to:
   //  1. Create canvas, which support OpenGL drawing (two ways):
   //     a. Call gStyle->SetCanvasPreferGL(kTRUE)
   //     b. Or create canvas with name, wich contains "gl".
   //  2. create TGLParametricEquation object.
   //     TGLParametricEquation *eq = new TGLParametricEquation("name",
   //     "some FORMULA here - x(u, v)",
   //     "some FORMULA here - y(u, v)",
   //     "some FORMULA here - z(u, v)",
   //     uMin, uMax, vMin, vMax);
   //     where FORMULA is the same string (mathematical expression),
   //     as in TF2, but you should use 'u' (or 'U') instead of 'x'
   //     and 'v' (or 'V') instead of 'y'.
   //  3. Call equation->Draw();
   //     Parametric surfaces support 21 color "schemes", you can change
   //     the color:
   //     -place mouse cursor above surface (surface is selected in pad)
   //     -press 's' or 'S'.
   gStyle->SetCanvasPreferGL(kTRUE);
   TCanvas *c = new TCanvas("canvas","Parametric surfaces with gl", 100, 10,
                            700, 700);
   c->SetFillColor(42);
   gStyle->SetFrameFillColor(42);

   c->Divide(2, 2);
   c->cd(1);
   TGLParametricEquation *p1 = new TGLParametricEquation("Conchoid",
                                "1.2 ^ u * (1 + cos(v)) * cos(u)",
                                "1.2 ^ u * (1 + cos(v)) * sin(u)",
                                "1.2 ^ u * sin(v) - 1.5 * 1.2 ^ u",
                                0., 6 * TMath::Pi(), 0., TMath::TwoPi());
   p1->Draw();

   c->cd(2);
   TGLParametricEquation *p2 = new TGLParametricEquation("Apple",
        "cos(u) * (4 + 3.8 * cos(v)) ",
        "sin(u) * (4 + 3.8 * cos(v))",
        "(cos(v) + sin(v) - 1) * (1 + sin(v)) * log(1 - pi * v / 10) + 7.5 * sin(v)",
        0, TMath::TwoPi(), -TMath::Pi(), TMath::Pi());
   p2->Draw();

   c->cd(3);
   TGLParametricEquation *p3 = new TGLParametricEquation("Toupie",
                                        "(abs(u) - 1) ^ 2 * cos(v)",
                                        "(abs(u) - 1) ^ 2 * sin(v)",
                                        "u",
                                        -1., 1., 0, TMath::TwoPi());
   p3->Draw();

   c->cd(4);
   TGLParametricEquation *p4 = new TGLParametricEquation("Trangluoid trefoil",
        "2 * sin(3 * u) / (2 + cos(v))",
        "2 * (sin(u) + 2 * sin(2 * u)) / (2 + cos(v + 2 * pi / 3))",
        "(cos(u) - 2 * cos(2 * u)) * (2 + cos(v)) * (2 + cos(v + 2 * pi / 3)) / 4",
                        -TMath::Pi(), TMath::Pi(), -TMath::Pi(), TMath::Pi());
   p4->Draw();
}
 glparametric.C:1
 glparametric.C:2
 glparametric.C:3
 glparametric.C:4
 glparametric.C:5
 glparametric.C:6
 glparametric.C:7
 glparametric.C:8
 glparametric.C:9
 glparametric.C:10
 glparametric.C:11
 glparametric.C:12
 glparametric.C:13
 glparametric.C:14
 glparametric.C:15
 glparametric.C:16
 glparametric.C:17
 glparametric.C:18
 glparametric.C:19
 glparametric.C:20
 glparametric.C:21
 glparametric.C:22
 glparametric.C:23
 glparametric.C:24
 glparametric.C:25
 glparametric.C:26
 glparametric.C:27
 glparametric.C:28
 glparametric.C:29
 glparametric.C:30
 glparametric.C:31
 glparametric.C:32
 glparametric.C:33
 glparametric.C:34
 glparametric.C:35
 glparametric.C:36
 glparametric.C:37
 glparametric.C:38
 glparametric.C:39
 glparametric.C:40
 glparametric.C:41
 glparametric.C:42
 glparametric.C:43
 glparametric.C:44
 glparametric.C:45
 glparametric.C:46
 glparametric.C:47
 glparametric.C:48
 glparametric.C:49
 glparametric.C:50
 glparametric.C:51
 glparametric.C:52
 glparametric.C:53
 glparametric.C:54
 glparametric.C:55
 glparametric.C:56
 glparametric.C:57
 glparametric.C:58
 glparametric.C:59
 glparametric.C:60
 glparametric.C:61
 glparametric.C:62
 glparametric.C:63
 glparametric.C:64