28 typedef std::vector<Double_t> vector_type;
29 typedef vector_type::size_type size_type;
32 void create_flower(vector_type &xs, vector_type &ys, size_type nPoints, Double_t r)
34 assert(nPoints > 100 &&
"create_flower, number of points is too small");
36 xs.resize(nPoints + 1);
37 ys.resize(nPoints + 1);
39 const Double_t angle = 21. * TMath::Pi() / nPoints;
41 for (size_type i = 0; i <= nPoints; ++i) {
42 const Double_t u = i * angle;
43 const Double_t p4 = TMath::Sin(17 * u / 3);
44 const Double_t p8 = TMath::Sin(2 * TMath::Cos(3 * u) - 28 * u);
45 const Double_t rr = r * (1 + TMath::Sin(11 * u / 5)) - 4 * p4 * p4 * p4 * p4 * p8 * p8 * p8 * p8 * p8 * p8 * p8 * p8;
47 xs[i] = rr * TMath::Cos(u);
48 ys[i] = rr * TMath::Sin(u);
57 Color_t indices[3] = {};
58 if (ROOT::CocoaTutorials::FindFreeCustomColorIndices(indices) != 3) {
59 ::Error(
"flower",
"failed to create custom colors");
64 TCanvas *
const cnv =
new TCanvas(
"Chrysanthemum",
"Chrysanthemum", 900, 900);
65 if (gVirtualX && !gVirtualX->InheritsFrom(
"TGCocoa")) {
66 ::Error(
"flower",
"This macro requires OS X version of ROOT with cocoa enabled");
76 create_flower(xs, ys, 300, 6);
77 TGraph *
const gr1 =
new TGraph(Int_t(xs.size()), &xs[0], &ys[0]);
78 new TColor(indices[0], 0., 0., 0.5,
"custom_blue", 0.7);
79 gr1->SetFillColor(indices[0]);
80 gr1->SetName(
"part1");
81 gr1->SetTitle(
"part1");
83 create_flower(xs, ys, 500000, 8);
84 TGraph *
const gr2 =
new TGraph(Int_t(xs.size()), &xs[0], &ys[0]);
85 new TColor(indices[1], 0.5, 0., 0.5,
"custom_purple", 0.5);
86 gr2->SetFillColor(indices[1]);
87 gr2->SetName(
"part2");
88 gr2->SetTitle(
"part2");
90 create_flower(xs, ys, 100000, 10);
91 TGraph *
const gr3 =
new TGraph(Int_t(xs.size()), &xs[0], &ys[0]);
94 new TColor(indices[2], 1., 0., 0.4,
"custom_magenta", 0.2);
95 gr3->SetFillColor(indices[2]);
96 gr3->SetName(
"part3");
97 gr3->SetTitle(
"part3");
103 TMultiGraph *
const flower =
new TMultiGraph(
"Chrysanthemum",
"Chrysanthemum");