A TH2Poly build with Fibonacci numbers.
In mathematics, the Fibonacci sequence is a suite of integer in which every number is the sum of the two preceding one.
The first 10 Fibonacci numbers are:
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...
This tutorial computes Fibonacci numbers and uses them to build a TH2Poly producing the "Fibonacci spiral" created by drawing circular arcs connecting the opposite corners of squares in the Fibonacci tiling.
void Arc(int n, double a, double r, double *px, double *py);
void AddFibonacciBin(
TH2Poly *h2pf,
double N);
void Fibonacci(int N=7) {
double f0 = 0.;
double f1 = 1.;
double ft;
AddFibonacciBin(h2pf, f1);
for (
int i=0; i<=
N; i++) {
f0 = ft;
AddFibonacciBin(h2pf, f1);
}
h2pf->
Draw(
"A COL L TEXT");
}
void Arc(int n, double a, double r, double *px, double *py) {
for (int i = 2; i<=n-2; i++) {
a = a+da;
}
}
void AddFibonacciBin(
TH2Poly *h2pf,
double N) {
double X1 = 0.;
double Y1 = 0.;
double X2 = 1.;
double Y2 = 1.;
static int MoveId = 0;
static double T = 1.;
static double L = 0.;
static double R = 1.;
const int NP = 50;
double px[NP];
double py[NP];
switch (MoveId) {
case 1:
px[0] = X1;
py[0] = Y2;
px[1] = X1;
py[1] = Y1;
px[NP-1] = X2;
py[NP-1] = Y2;
Arc(NP,3*pi2,(double)N,px,py);
break;
case 2:
px[0] = X1;
py[0] = Y1;
px[1] = X2;
py[1] = Y1;
px[NP-1] = X1;
py[NP-1] = Y2;
Arc(NP,0.,(double)N,px,py);
break;
case 3:
px[0] = X2;
py[0] = Y1;
px[1] = X2;
py[1] = Y2;
px[NP-1] = X1;
py[NP-1] = Y1;
Arc(NP,pi2,(double)N,px,py);
break;
case 4:
px[0] = X2;
py[0] = Y2;
px[1] = X1;
py[1] = Y2;
px[NP-1] = X2;
py[NP-1] = Y1;
Arc(NP,2*pi2,(double)N,px,py);
break;
}
if (MoveId==0) h2pf->
AddBin(X1,Y1,X2,Y2);
else h2pf->
AddBin(NP, px ,py);
h2pf->
Fill((X1+X2)/2.5, (Y1+Y2)/2.5, N);
MoveId++;
if (MoveId==5) MoveId=1;
}
- Author
- Olivier Couet
Definition in file Fibonacci.C.