// 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_of_object", // "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 |
|