source: trunk/SRC/ToBeReviewed/UTILITAIRE/lineintersection.pro @ 114

Last change on this file since 114 was 114, checked in by smasson, 18 years ago

new compilation options (compile_opt idl2, strictarrsubs) in each routine

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 2.7 KB
Line 
1;------------------------------------------------------------
2;------------------------------------------------------------
3;------------------------------------------------------------
4;+
5; NAME: lineintersection
6;
7; PURPOSE: Calcule les coordonnees de l''intersection de 2 droites ou
8; d''une serie de 2 droites
9;
10; CATEGORY:petit truc qui peut etre utile (sans boucles, ca va de soit!)
11;
12; CALLING SEQUENCE: point=lineintersection(abc1, abc2)
13;
14; INPUTS: abc est un tableau de dimensions 3,
15; nbre_de_couple_de_droites, dont chaque ligne contient les 3
16; parametres a, b, c de l''equation de droite du type ax+by+c=0
17;
18; KEYWORD PARAMETERS:
19;       /FLOAT: pour retourner l''output sous forme de tableau de
20;       reel plutot que de vecteur decomplexes (par defaut)
21;
22; OUTPUTS:2 possibilites:
23;      1) par defaut: c''est une vecteur de complexe dont chaque
24;      element est les coordonnees du point d''intersection d''un
25;      couple de droites.
26;      2) si /FLOAT est active, c'est un tableau de reels de
27;      dimensiones 2, nbre_de_couple_de_droites dont chaque
28;      ligne est les coordonnees du point d''intersection d''un
29;      couple de droites
30;
31; COMMON BLOCKS:
32;
33; SIDE EFFECTS:si les deux droites dont paralleles, on retourne les
34; coordonnes (!values.f_nan,!values.f_nan)
35;
36; RESTRICTIONS:attention a la precision de la machine qui fait que
37; les coordonnees calcules de verifient peut-etre pas exactement les
38; equations du couple de droites.
39;
40; EXAMPLE:
41;     IDL> abc1=linearequation(complex(1,2),[3,4])
42;     IDL> abc2=linearequation(complex(1,2),[8,15])
43;     IDL> print, lineintersection(abc1, abc2)
44;     (      1.00000,      2.00000)
45;     IDL> print, lineintersection(abc1, abc2,/float)
46;           1.00000      2.00000
47;
48; MODIFICATION HISTORY:Sebastien Masson (smasson@lodyc.jussieu.fr)
49;                      10 juin 2000
50;-
51;------------------------------------------------------------
52;------------------------------------------------------------
53;------------------------------------------------------------
54FUNCTION lineintersection, abc1, abc2, FLOAT = float
55;
56;
57  compile_opt idl2, strictarrsubs
58;
59   a1 = float(reform(abc1[0, *]))
60   b1 = float(reform(abc1[1, *]))
61   c1 = float(reform(abc1[2, *]))
62   a2 = float(reform(abc2[0, *]))
63   b2 = float(reform(abc2[1, *]))
64   c2 = float(reform(abc2[2, *]))
65;
66   determinant = a1*b2-a2*b1
67   nan = where(determinant EQ 0)
68   if nan[0] NE -1 THEN determinant = !values.f_nan
69;
70   x = (b1*c2-c1*b2)/determinant
71   y = (c1*a2-a1*c2)/determinant
72;
73   if keyword_set(float) then begin
74      npts = n_elements(x)
75      res = [reform(x, 1, npts, /over), reform(y, 1, npts, /over)]
76   ENDIF ELSE res = complex(x, y)
77   return, res
78end
Note: See TracBrowser for help on using the repository browser.