source: trunk/SRC/Interpolation/cutsegment.pro @ 136

Last change on this file since 136 was 136, checked in by pinsard, 18 years ago

some improvements and corrections in some .pro file according to
aspell and idldoc log file

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