source: trunk/SRC/Interpolation/cutsegment.pro

Last change on this file was 493, checked in by pinsard, 10 years ago

fix some typos in comments

  • Property svn:keywords set to Id
File size: 3.3 KB
Line 
1;+
2;
3; @file_comments
4; cut p segments into p*n equal parts
5;
6; @categories
7; basic work
8;
9; @param x0 {in}{required}
10; @param y0 {in}{required}
11; @param x1 {in}{required}
12; @param y1 {in}{required}
13; 1d arrays of p elements, the coordinates of the endpoints of the p segments
14;
15; @param n {in}{required}
16; the number of pieces we want to cut each segment
17;
18; @keyword ENDPOINTS
19; see returns
20;
21; @keyword ONSPHERE
22; to specify that the points are located on a sphere.
23; In this case, x and y correspond to longitude and latitude in degrees.
24;
25; @returns
26;  - default: a 3d array (2,n,p) that gives the coordinates of the
27;  middle of the cut segments.
28;  - if /ENDPOINTS, a 3d array (2,n+1,p) that gives the
29;  coordinates of the endpoints of the cut segments.
30;
31; @examples
32;
33;   IDL> x0=[2,5]
34;   IDL> y0=[5,1]
35;   IDL> x1=[9,3]
36;   IDL> y1=[1,8]
37;   IDL> res=cutsegment(x0, y0, x1, y1, 10)
38;   IDL> splot, [0,10], [0,10], xstyle = 1, ystyle = 1,/nodata
39;   IDL> oplot, [x0[0], x1[0]], [y0[0], y1[0]]
40;   IDL> oplot, [res[0,*,0]], [res[1,*,0]], color = 20, psym = 1, thick = 3
41;   IDL> oplot, [x0[1], x1[1]], [y0[1], y1[1]]
42;   IDL> oplot, [res[0,*,1]], [res[1,*,1]], color = 40, psym = 1, thick = 3
43;
44; @history
45;           S. Masson (smasson\@lodyc.jussieu.fr)
46;           July 5th, 2002
47;
48; @version
49; $Id$
50;
51;-
52FUNCTION cutsegment, x0, y0, x1, y1, n $
53                   , ENDPOINTS=endpoints, ONSPHERE=onsphere
54;
55  compile_opt idl2, strictarrsubs
56;
57; number of segment
58  nseg = n_elements(x0)
59; number of point to find on each segment
60  n2find = n+keyword_set(endpoints)
61;
62  IF keyword_set(onsphere) THEN BEGIN
63; save the inputs arrays
64    x0in = temporary(x0)
65    y0in = temporary(y0)
66    x1in = temporary(x1)
67    y1in = temporary(y1)
68    sp_cood = [transpose(x0in[*]),transpose(y0in[*]),replicate(1, 1, nseg)]
69    rect_coord = CV_COORD(FROM_SPHERE = temporary(sp_cood), /TO_RECT, /DEGREES)
70    x0 = rect_coord[0, *]
71    y0 = rect_coord[1, *]
72    z0 = rect_coord[2, *]
73    rect_coord = -1 ;free memory
74    sp_cood = [transpose(x1in[*]),transpose(y1in[*]),replicate(1, 1, nseg)]
75    rect_coord = CV_COORD(FROM_SPHERE = temporary(sp_cood), /TO_RECT, /DEGREES)
76    x1 = rect_coord[0, *]
77    y1 = rect_coord[1, *]
78    z1 = rect_coord[2, *]
79    rect_coord = -1 ;free memory
80  ENDIF
81;
82  resx = replicate(1, n2find)#x0[*]
83  resx = temporary(resx)+(1./n*(findgen(n2find) $
84                                +.5*(1-keyword_set(endpoints))))#(x1-x0)[*]
85  resx = (temporary(resx))[*]
86;
87  resy = replicate(1, n2find)#y0[*]
88  resy = temporary(resy)+(1./n*(findgen(n2find) $
89                                +.5*(1-keyword_set(endpoints))))#(y1-y0)[*]
90  resy = (temporary(resy))[*]
91
92  IF keyword_set(onsphere) THEN BEGIN
93    resz = replicate(1, n2find)#z0[*]
94    resz = temporary(resz)+(1./n*(findgen(n2find) $
95                                  +.5*(1-keyword_set(endpoints))))#(z1-z0)[*]
96    resz = (temporary(resz))[*]
97
98    rec_cood = [transpose(temporary(resx)), transpose(temporary(resy)) $
99                , transpose(temporary(resz))]
100    res = CV_COORD(FROM_RECT = temporary(rec_cood), /TO_SPHERE, /DEGREES)
101; restore the input arrays
102    x0 = temporary(x0in)
103    y0 = temporary(y0in)
104    x1 = temporary(x1in)
105    y1 = temporary(y1in)
106  ENDIF ELSE res = [transpose(temporary(resx)), transpose(temporary(resy))]
107
108  res = reform(res[0:1, *], 2, n2find, nseg, /overwrite)
109
110  RETURN, res
111END
Note: See TracBrowser for help on using the repository browser.