ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/acismesh/qu_rechercher.cpp
Revision: 1
Committed: Mon Jun 11 22:53:07 2007 UTC (17 years, 11 months ago)
File size: 5653 byte(s)
Log Message:

File Contents

# User Rev Content
1 1 /*****************************************************************
2    
3     qu_rechercher.c Type:Func
4    
5     Recherche d element dans l arbre quaternaire cyclique
6    
7     Date de creation : Wed Feb 12 09:40:00 1997
8    
9     Derniere version : Wed May 28 11:50:37 1997
10    
11    
12    
13    
14    
15    
16    
17    
18    
19    
20     Vincent FRANCOIS
21    
22     *****************************************************************/
23    
24    
25    
26    
27    
28     /**************************/
29     /* include */
30     #include <stdio.h>
31     #include <string.h>
32     #include <stdlib.h>
33     #include "const.h"
34     #include "memoire.h"
35     #include "struct.h"
36     #include "prototype.h"
37    
38    
39     /**************************/
40     /* variables globales */
41     extern struct environnment env;
42     extern struct s_mesh *mesh;
43    
44    
45    
46     /**************************/
47     /* programme principal */
48    
49     void qu_rechercher(float u,float v,float rayon,struct s_quadtree *quad,struct s_quadtree **liste,int *nb_liste)
50     {
51     float umin,umax,vmax,vmin;
52     float rev_u,rev_v;
53     int *liste_quad;
54    
55    
56    
57     rev_u=mesh->rev_u;
58     rev_v=mesh->rev_v;
59     umin=u-rayon;
60     vmin=v-rayon;
61     umax=u+rayon;
62     vmax=v+rayon;
63    
64    
65    
66     liste_quad=(int *)calloc(mesh->nb_quadtree+1,sizeof(int));
67     ERREUR_ALLOC(liste_quad);
68     if ((rev_u==0.)&&(rev_v==0.))
69     {
70     qu_parcour(umin,vmin,umax,vmax,quad,liste,nb_liste,liste_quad);
71     free(liste_quad);
72     return;
73     }
74     if ((rev_u!=0.)&&(rev_v==0))
75     {
76     if ((umin>=0.) && (umax<rev_u))
77     {
78     qu_parcour(umin,vmin,umax,vmax,quad,liste,nb_liste,liste_quad);
79     free(liste_quad);
80     return;
81     }
82     if (umin<0.)
83     {
84     qu_parcour(0.,vmin,umax,vmax,quad,liste,nb_liste,liste_quad);
85     qu_parcour(umin+rev_u,vmin,rev_u,vmax,quad,liste,nb_liste,liste_quad);
86     free(liste_quad);
87     return;
88     }
89     if (umax>=rev_u)
90     {
91     qu_parcour(umin,vmin,rev_u,vmax,quad,liste,nb_liste,liste_quad);
92     qu_parcour(0.,vmin,umax-rev_u,vmax,quad,liste,nb_liste,liste_quad);
93     free(liste_quad);
94     return;
95     }
96     }
97     if ((rev_u==0.)&&(rev_v!=0))
98     {
99     if ((vmin>=0.) && (vmax<rev_v))
100     {
101     qu_parcour(umin,vmin,umax,vmax,quad,liste,nb_liste,liste_quad);
102     free(liste_quad);
103     return;
104     }
105     if (vmin<0.)
106     {
107     qu_parcour(umin,0.,umax,vmax,quad,liste,nb_liste,liste_quad);
108     qu_parcour(umin,vmin+rev_v,umax,rev_v,quad,liste,nb_liste,liste_quad);
109     free(liste_quad);
110     return;
111     }
112     if (vmax>=rev_v)
113     {
114     qu_parcour(umin,vmin,umax,rev_v,quad,liste,nb_liste,liste_quad);
115     qu_parcour(umin,0.,umax,vmax-rev_v,quad,liste,nb_liste,liste_quad);
116     free(liste_quad);
117     return;
118     }
119     }
120     if ((rev_u!=0.)&&(rev_v!=0))
121     {
122     if ((umin>=0.) && (umax<rev_u) && (vmin>=0.) && (vmax<rev_v))
123     {
124     qu_parcour(umin,vmin,umax,vmax,quad,liste,nb_liste,liste_quad);
125     free(liste_quad);
126     return;
127     }
128     if ((umin<0.)&&(vmin<0.))
129     {
130     qu_parcour(0.,0.,umax,vmax,quad,liste,nb_liste,liste_quad);
131     qu_parcour(umin+rev_u,0.,rev_u,vmax,quad,liste,nb_liste,liste_quad);
132     qu_parcour(0.,vmin+rev_v,umin,rev_v,quad,liste,nb_liste,liste_quad);
133     qu_parcour(umin+rev_u,vmin+rev_v,rev_u,rev_v,quad,liste,nb_liste,liste_quad);
134     free(liste_quad);
135     return;
136     }
137     if ((umin<0.)&&(vmax>=rev_v))
138     {
139     qu_parcour(0.,vmin,umax,rev_v,quad,liste,nb_liste,liste_quad);
140     qu_parcour(0.,0.,umax,vmax-rev_v,quad,liste,nb_liste,liste_quad);
141     qu_parcour(umin+rev_u,0.,rev_u,vmax-rev_v,quad,liste,nb_liste,liste_quad);
142     qu_parcour(umin+rev_u,vmin,rev_u,rev_v,quad,liste,nb_liste,liste_quad);
143     free(liste_quad);
144     return;
145     }
146     if ((umax>=rev_u)&&(vmax>=rev_v))
147     {
148     qu_parcour(umin,vmin,rev_u,rev_v,quad,liste,nb_liste,liste_quad);
149     qu_parcour(0.,vmin,umax-rev_u,rev_v,quad,liste,nb_liste,liste_quad);
150     qu_parcour(0.,0.,umax-rev_u,vmax-rev_v,quad,liste,nb_liste,liste_quad);
151     qu_parcour(umin,0.,rev_u,vmax-rev_v,quad,liste,nb_liste,liste_quad);
152     free(liste_quad);
153     return;
154     }
155     if ((umax>=rev_u)&&(vmin<0.))
156     {
157     qu_parcour(umin,0.,rev_u,vmax,quad,liste,nb_liste,liste_quad);
158     qu_parcour(0.,0.,umax-rev_u,vmax,quad,liste,nb_liste,liste_quad);
159     qu_parcour(0.,vmin+rev_v,umax-rev_u,rev_v,quad,liste,nb_liste,liste_quad);
160     qu_parcour(umin,vmin+rev_v,rev_u,rev_v,quad,liste,nb_liste,liste_quad);
161     free(liste_quad);
162     return;
163     }
164     if (umin<0.)
165     {
166     qu_parcour(0.,vmin,umax,vmax,quad,liste,nb_liste,liste_quad);
167     qu_parcour(umin+rev_u,vmin,rev_u,vmax,quad,liste,nb_liste,liste_quad);
168     free(liste_quad);
169     return;
170     }
171     if (vmin<0.)
172     {
173     qu_parcour(umin,0.,umax,vmax,quad,liste,nb_liste,liste_quad);
174     qu_parcour(umin,vmin+rev_v,umax,rev_v,quad,liste,nb_liste,liste_quad);
175     free(liste_quad);
176     return;
177     }
178     if (umax>=rev_u)
179     {
180     qu_parcour(umin,vmin,rev_u,vmax,quad,liste,nb_liste,liste_quad);
181     qu_parcour(0.,vmin,umax,vmax,quad,liste,nb_liste,liste_quad);
182     free(liste_quad);
183     return;
184     }
185     if (vmax>=rev_v)
186     {
187     qu_parcour(umin,vmin,umax,rev_v,quad,liste,nb_liste,liste_quad);
188     qu_parcour(umin,0.,umax,vmax-rev_v,quad,liste,nb_liste,liste_quad);
189     free(liste_quad);
190     return;
191     }
192    
193     }
194     }