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 (18 years, 2 months ago)
File size: 5653 byte(s)
Log Message:

File Contents

# Content
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 }