What's new? | Help | Directory | Sign in
Google
ocaml-plplot
PLplot library bindings for OCaml
  
  
  
  
    
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
(*
Copyright 2007 Hezekiah M. Carty

This file is part of ocaml-plplot.

ocaml-plplot is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.

ocaml-plplot is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License
along with ocaml-plplot. If not, see <http://www.gnu.org/licenses/>.
*)

(* A more or less direct port of the PLplot example 11 *)
open Plplot

let xpts = 35 (* Data points in x *)
let ypts = 46 (* Data points in y *)
let nlevel = 10 (* Contouring levels *)


let alt = [|33.0; 17.0|]
let az = [|24.0; 115.0|]
let opt = [|3; 3|]
let title = [|"#frPLplot Example 11 - Alt=33, Az=24, Opt=3";
"#frPLplot Example 11 - Alt=17, Az=115, Opt=3"|]

let cmap1_init () =
let i = [|0.0; 1.0|] in (* left+right bounds *)
let h = [|240.0; 0.0|] in
let l = [|0.6; 0.6|] in
let s = [|0.8; 0.8|] in
plscmap1n 256;
plscmap1l 0 i h l s None;
()

(*--------------------------------------------------------------------------*\
* main
*
* Does a series of mesh plots for a given data set, with different
* viewing options in each plot.
\*--------------------------------------------------------------------------*)

let () =
(* Initialize plplot *)
plinit ();

(* Convenience, because I'm lazy *)
let (!.) = float_of_int in

let x =
Array.init xpts (
fun i ->
3. *. (!.i -. (!.xpts /. 2.)) /. (!.xpts /. 2.)
)
in
let y =
Array.init ypts (
fun i ->
3. *. (!.i -. (!.ypts /. 2.)) /. (!.ypts /. 2.)
)
in

let z = Array.make_matrix xpts ypts 0.0 in

for i = 0 to xpts - 1 do
let xx = x.(i) in
for j = 0 to ypts - 1 do
let yy = y.(j) in
z.(i).(j) <-
3. *. (1. -. xx) *. (1. -. xx) *.
exp (-.(xx *. xx) -. (yy +. 1.) *. (yy +. 1.)) -.
10. *. (xx /. 5. -. xx**3. -. yy**5.) *.
exp (-.(xx *. xx) -. (yy *. yy)) -.
1. /. 3. *. exp (-.(xx +. 1.) *. (xx +. 1.) -. (yy *. yy));
done
done;

let zmin, zmax = plMinMax2dGrid z in
let step = (zmax -. zmin) /. !.(nlevel + 1) in
let clevel = Array.init nlevel (fun i -> zmin +. step +. step *. !.i) in

cmap1_init();
for k = 0 to 1 do
for i = 0 to 3 do
pladv 0;
plcol0 1;
plvpor 0.0 1.0 0.0 0.9;
plwind (-1.0) 1.0 (-1.0) 1.5;
plw3d 1.0 1.0 1.2 (-3.0) 3.0 (-3.0) 3.0 zmin zmax alt.(k) az.(k);
plbox3 "bnstu" "x axis" 0.0 0
"bnstu" "y axis" 0.0 0
"bcdmnstuv" "z axis" 0.0 4;

plcol0 2;

let () =
match i with
0 ->
(* wireframe plot *)
plmesh x y z opt.(k);
| 1 ->
(* magnitude colored wireframe plot *)
plmesh x y z (opt.(k) lor 4);
| 2 ->
(* magnitude colored wireframe plot with sides *)
plot3d x y z (opt.(k) lor 4) 1;
| 3 ->
(* magnitude colored wireframe plot with base contour *)
plmeshc x y z (opt.(k) lor 4 lor 8)
clevel;
| _ -> raise (Failure "You let i get too big!")
in

plcol0 3;
plmtex "t" 1.0 0.5 0.5 title.(k);
done
done;

(* Clean up *)

plend ();
()
Show details
Hide

Change log

r52 by hcarty on Apr 15, 2008   Diff
* examples/x11.ml and x19.ml - Add/fix
LGPL header text

Older revisions

r14 by hcarty on Dec 07, 2007   Diff
 r86@toybox44:  hcarty | 2007-11-18
23:06:56 -0500
 * (Starting to) get everything in
order so this is properly under the
LGPL v2+
r10 by hcarty on Dec 07, 2007   Diff
 r318@laptop44:  hcarty | 2007-11-14
18:00:16 -0500
 * examples/x11.ml - A straight port
of example 11 from the plplot
distribution
All revisions of this file

File info

Size: 3521 bytes, 129 lines