Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
tornado.C
Go to the documentation of this file.
1 /// \file
2 /// \ingroup tutorial_graphics
3 /// \notebook
4 /// Show 3-d polymarker.
5 ///
6 /// \macro_image
7 /// \macro_code
8 ///
9 /// \author Rene Brun
10 
11 void tornado() {
12  gBenchmark->Start("tornado");
13 
14  double PI = 3.141592653;
15  int d = 16;
16  int numberOfPoints=200;
17  int numberOfCircles=40;
18 
19  // create and open a canvas
20  TCanvas *sky = new TCanvas( "sky", "Tornado", 300, 10, 700, 500 );
21  sky->SetFillColor(14);
22 
23  // creating view
24  TView *view = TView::CreateView(1,0,0);
25  float range = numberOfCircles*d;
26  view->SetRange( 0, 0, 0, 4.0*range, 2.0*range, range );
27 
28  for( int j = d; j < numberOfCircles*d; j += d ) {
29 
30  // create a PolyMarker3D
31  TPolyMarker3D *pm3d = new TPolyMarker3D( numberOfPoints );
32 
33  float x, y, z;
34 
35  // set points
36  for( int i = 1; i < numberOfPoints; i++ ) {
37  float csin = sin(2*PI / (double)numberOfPoints * (double)i) + 1;
38  float ccos = cos(2*PI / (double)numberOfPoints * (double)i) + 1;
39  float esin = sin(2*PI / (double)(numberOfCircles*d) * (double)j) + 1;
40  x = j * ( csin + esin );
41  y = j * ccos;
42  z = j;
43  pm3d->SetPoint( i, x, y, z );
44  }
45 
46  // set marker size, color & style
47  pm3d->SetMarkerSize( 1 );
48  pm3d->SetMarkerColor( 2 + ( d == ( j & d ) ) );
49  pm3d->SetMarkerStyle( 3 );
50 
51  //draw
52  pm3d->Draw();
53  }
54 
55  char timeStr[60];
56  gBenchmark->Show("tornado");
57 
58  Float_t ct = gBenchmark->GetCpuTime("tornado");
59  sprintf( timeStr, "Execution time: %g sec.", ct);
60 
61  TPaveText *text = new TPaveText( 0.1, 0.81, 0.9, 0.97 );
62  text->SetFillColor( 42 );
63  text->AddText("ROOT example: tornado.C");
64  text->AddText(timeStr);
65  text->Draw();
66  sky->Update();
67 }