1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
|
open Mlpost
open Command
open Path
open Point
open Plot
module T = Transform
let f1 i =
let aux = function
| 0 -> 1
| 1 | 2 -> 2
| 3 | 4 -> 3
| 5 -> 4
| 6 | 7 -> 5
| 8 | 9 -> 6
| 10 -> 7
| 11 | 12 -> 8
| 13 | 14 -> 9
| 15 -> 10
| 16 | 17 -> 11
| 18 | 19 -> 12
| 20 -> 13
| _ -> 0
in
float_of_int (aux i)
let f2 i =
let aux = function
| 0 | 1 | 2 -> 0
| 3 -> 1
| 4 -> 2
| 5 | 6 | 7 -> 3
| 8 -> 4
| 9 -> 5
| 10 | 11 | 12 -> 6
| 13 -> 7
| 14 -> 8
| 15 | 16 | 17 -> 9
| 18 -> 10
| 19 -> 11
| 20 -> 12
| _ -> 0
in
float_of_int (aux i)
let f3 i = float_of_int ((i + 3) / 5)
let flab i =
( Picture.transform [ Transform.scaled 1.7 ]
(Picture.tex (Printf.sprintf "$f_{\\omega_%d}$" i)),
Command.Ptop,
19 )
let instants =
let pen = Pen.default ~tr:[ Transform.scaled 2.5 ] () in
let base =
Command.draw ~pen (Path.path ~style:JLine [ (0., -65.); (280., -65.) ])
in
let tick i =
let xi = float_of_int i *. 14. in
let yi = if f1 i = f1 (i - 1) then -60. else -45. in
let p = Path.path ~style:JLine [ (xi, -65.); (xi, yi) ] in
Command.draw ~pen p
in
Command.seq
[
base;
Command.iter 0 20 tick;
Command.label
(Picture.transform [ Transform.scaled 2. ] (Picture.tex "$\\omega_1$"))
(pt (-20., -55.));
]
let florence =
let sk = mk_skeleton 20 14 14. 20. in
let pen = Pen.default ~tr:[ Transform.scaled 4. ] () in
let pen2 = Pen.default ~tr:[ Transform.scaled 3. ] () in
let dash _ = Dash.scaled 0.5 Dash.withdots in
let dash2 = Dash.scaled 0.66 Dash.withdots in
let dash3 = Dash.scaled 0.9 Dash.evenly in
let vcaption, hcaption =
let tr = [ Transform.scaled 1.5 ] in
( Picture.transform tr (Picture.tex "\\textsf{Number of ones}"),
Picture.transform tr (Picture.tex "\\textsf{Instants}") )
in
let plot = draw_func ~drawing:Stepwise ~style:JLine in
[
draw_grid ~hdash:dash ~vdash:dash sk;
draw_axes ~closed:true ~hcaption ~vcaption sk;
plot ~pen ~label:(flab 1) f1 sk;
plot ~pen:pen2 ~dashed:dash2 ~label:(flab 2) f2 sk;
plot ~pen ~dashed:dash3 ~label:(flab 3) f3 sk;
instants;
]
let _ = Metapost.emit "florence" florence
|