/usr/share/doc/libplplot11/examples/ocaml/x18.ml is in libplplot-dev 5.9.9-2ubuntu2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | (* $Id: x18.ml 11409 2011-01-01 00:26:35Z hezekiahcarty $
3-d line and point plot demo. Adapted from x08c.c.
*)
open Plplot
open Printf
let opt = [|1; 0; 1; 0|]
let alt = [|20.0; 35.0; 50.0; 65.0|]
let az = [|30.0; 40.0; 50.0; 60.0|]
let npts = 1000
let pi = atan 1.0 *. 4.0
let test_poly k =
let draw = [| [| true; true; true; true|];
[| true; false; true; false|];
[|false; true; false; true|];
[| true; true; false; false|] |] in
let two_pi = 2.0 *. pi in
pladv 0;
plvpor 0.0 1.0 0.0 0.9;
plwind (-1.0) 1.0 (-0.9) 1.1;
plcol0 1;
plw3d 1.0 1.0 1.0 (-1.0) 1.0 (-1.0) 1.0 (-1.0) 1.0 alt.(k) az.(k);
plbox3 "bnstu" "x axis" 0.0 0
"bnstu" "y axis" 0.0 0
"bcdmnstuv" "z axis" 0.0 0;
plcol0 2;
let theta a = two_pi *. float_of_int a /. 20.0 in
let phi a = pi *. float_of_int a /. 20.1 in
let x = Array.make 5 0.0 in
let y = Array.make 5 0.0 in
let z = Array.make 5 0.0 in
for i = 0 to 19 do
for j = 0 to 19 do
x.(0) <- sin (phi j) *. cos (theta i);
y.(0) <- sin (phi j) *. sin (theta i);
z.(0) <- cos (phi j);
x.(1) <- sin (phi (j + 1)) *. cos (theta i);
y.(1) <- sin (phi (j + 1)) *. sin (theta i);
z.(1) <- cos (phi (j + 1));
x.(2) <- sin (phi (j + 1)) *. cos (theta (i + 1));
y.(2) <- sin (phi (j + 1)) *. sin (theta (i + 1));
z.(2) <- cos (phi (j + 1));
x.(3) <- sin (phi j) *. cos (theta (i+1));
y.(3) <- sin (phi j) *. sin (theta (i+1));
z.(3) <- cos (phi j);
x.(4) <- sin (phi j) *. cos (theta i);
y.(4) <- sin (phi j) *. sin (theta i);
z.(4) <- cos (phi j);
plpoly3 x y z draw.(k) true;
done
done;
plcol0 3;
plmtex "t" 1.0 0.5 0.5 "unit radius sphere";
()
(*--------------------------------------------------------------------------*\
* Does a series of 3-d plots for a given data set, with different
* viewing options in each plot.
\*--------------------------------------------------------------------------*)
let () =
(* Parse and process command line arguments *)
plparseopts Sys.argv [PL_PARSE_FULL];
(* Initialize plplot *)
plinit ();
for k = 0 to 3 do
test_poly k
done;
(* From the mind of a sick and twisted physicist... *)
let z =
Array.init npts (
fun i ->
~-.1.0 +. 2.0 *. float_of_int i /. float_of_int npts
)
in
let x =
Array.mapi (
fun i r ->
r *. cos (2.0 *. pi *. 6.0 *. float_of_int i /. float_of_int npts)
) z
in
let y =
Array.mapi (
fun i r ->
r *. sin (2.0 *. pi *. 6.0 *. float_of_int i /. float_of_int npts)
) z
in
for k = 0 to 3 do
pladv 0;
plvpor 0.0 1.0 0.0 0.9;
plwind (-1.0) 1.0 (-0.9) 1.1;
plcol0 1;
plw3d 1.0 1.0 1.0 (-1.0) 1.0 (-1.0) 1.0 (-1.0) 1.0 alt.(k) az.(k);
plbox3 "bnstu" "x axis" 0.0 0
"bnstu" "y axis" 0.0 0
"bcdmnstuv" "z axis" 0.0 0;
plcol0 2;
if opt.(k) <> 0 then
plline3 x y z
else
(* U+22C5 DOT OPERATOR. *)
plstring3 x y z "⋅";
plcol0 3;
let title =
sprintf "#frPLplot Example 18 - Alt=%.0f, Az=%.0f" alt.(k) az.(k)
in
plmtex "t" 1.0 0.5 0.5 title;
done;
(* Clean up *)
plend ();
()
|