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
(*
Illustrates backdrop plotting of world, US maps.
Contributed by Wesley Ebisuzaki.

Updated for OCaml by Hezekiah Carty

Copyright 2007, 2008 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/>.
*)

open Plplot

(*--------------------------------------------------------------------------*\
* mapform19
*
* Defines specific coordinate transformation for example 19.
* Not to be confused with mapform in src/plmap.c.
* x[], y[] are the coordinates to be plotted.
\*--------------------------------------------------------------------------*)

let pi = atan (-1.0) *. 4.0

(* The mapform callback gets a single pair of x and y coordinates and their
index.
It should return the properly transformed coordinates a an (x,y) tuple. *)
let mapform19 i x y =
let radius = 90.0 -. y in
let xp = radius *. cos (x *. pi /. 180.0) in
let yp = radius *. sin (x *. pi /. 180.0) in
(xp, yp)

(*--------------------------------------------------------------------------*\
* main
*
* Shows two views of the world map.
\*--------------------------------------------------------------------------*)

let () =
(* Longitude (x) and latitude (y) *)
let miny = -70.0 in
let maxy = 80.0 in

plinit();

(* Cartesian plots *)
(* Most of world *)

let minx = 190.0 in
let maxx = 190.0 +. 360.0 in

plcol0 1;
plenv minx maxx miny maxy 1 (-1);
(* No transform function is passed to plmap. Since we have not set one yet,
it defaults to using an identity function (xp = x, yp = y) *)
plmap "usaglobe" minx maxx miny maxy;

(* The Americas *)
let minx = 190.0 in
let maxx = 340.0 in

plcol0 1;
plenv minx maxx miny maxy 1 (-1);
(* Again, we have not set a transform. Everything remains in a Cartesian
projection. *)
plmap "usaglobe" minx maxx miny maxy;

(* Polar, Northern hemisphere *)
let minx = 0.0 in
let maxx = 360.0 in

plenv (-75.) 75. (-75.) 75. 1 (-1);
(* Now we set mapform19 as our callback. It will be used for every following
plmap and plmeridians call until set to something else. *)
set_mapform mapform19;
plmap "globe" minx maxx miny maxy;

pllsty 2;
(* This call to plmeridians is also after the set_mapform call, so it uses
the same projection as the plmap call above. *)
plmeridians 10.0 10.0 0.0 360.0 (-10.0) 80.0;
plend ();
()
Show details
Hide

Change log

r54 by hcarty on Apr 15, 2008   Diff
* README, examples/x19.ml: Update from svn
because git-svn is barfing on Google

Older revisions

r52 by hcarty on Apr 15, 2008   Diff
* examples/x11.ml and x19.ml - Add/fix
LGPL header text
r41 by hcarty on Feb 16, 2008   Diff
* examples/x19.ml - Added "open
Plplot" so that the code actually
works...
r25 by hcarty on Dec 13, 2007   Diff
* examples/x19.ml - Add an adaptation
of example 19.  Based on the C
version.
All revisions of this file

File info

Size: 2972 bytes, 96 lines