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

File Contents

# Content
1 /*****************************************************************
2
3 m2d_d_segment.c Type:Func
4
5 Suppression du dernier segment creer
6
7 Date de creation : Wed Feb 26 15:54:11 1997
8
9 Derniere version : Wed May 28 11:50:10 1997
10
11
12
13
14
15
16
17
18
19
20
21 Vincent FRANCOIS
22
23 *****************************************************************/
24
25
26
27
28
29 /**************************/
30 /* include */
31 #include <stdio.h>
32 #include <math.h>
33 #include <stdlib.h>
34 #include "const.h"
35 #include "memoire.h"
36 #include "struct.h"
37 #include "prototype.h"
38
39 /**************************/
40 /* variables globales */
41 extern struct environnement env;
42 extern struct s_mesh *mesh;
43
44
45 /**************************/
46 /* programme principal */
47
48 void m2d_d_segment(struct s_segment **seg)
49 {
50 struct s_noeud *no1,*no2,*ac_no;
51 struct s_segment *ac_seg;
52 struct s_quadtree *quad;
53 float longueur;
54 float ui,vi,u1,v1,u2,v2,du,dv,uii,vii;
55 int i,nb_liste;
56 struct s_quadtree **liste_quad;
57
58
59 ac_seg=(*seg);
60 no1=ADRESSE(ac_seg->n1,noeud,mesh->);
61 no2=ADRESSE(ac_seg->n2,noeud,mesh->);
62 /* decalage */
63 if (mesh->rev_u!=0.) du=0.5*mesh->rev_u-no1->u; else du=0.;
64 if (mesh->rev_v!=0.) dv=0.5*mesh->rev_v-no1->v; else dv=0.;
65 eval_decale(&u1,du,no1->u,U);
66 eval_decale(&v1,dv,no1->v,V);
67 eval_decale(&u2,du,no2->u,U);
68 eval_decale(&v2,dv,no2->v,V);
69 liste_quad=(struct s_quadtree **)calloc(mesh->nb_quadtree+1,sizeof(struct s_quadtree *));
70 ERREUR_ALLOC(liste_quad);
71 ui=0.5*(u1+u2);
72 vi=0.5*(v1+v2);
73 eval_decale(&uii,-du,ui,U);
74 eval_decale(&vii,-dv,vi,V);
75 longueur=(float)sqrt((double)((u2-u1)*(u2-u1)+(v2-v1)*(v2-v1)));
76 nb_liste=0;
77 qu_rechercher(ui-du,vi-dv,longueur/2.,mesh->root,liste_quad,&nb_liste);
78 for (i=0;i<nb_liste;i++)
79 {
80 quad=liste_quad[i];
81 if (quad->nb_segment>0)
82 if (quad->segment[quad->nb_segment-1]==ac_seg) (quad->nb_segment)--;
83 }
84 ac_no=ADRESSE(ac_seg->n1,noeud,mesh->);
85 (ac_no->nb_segment)--;
86 ac_no=ADRESSE(ac_seg->n2,noeud,mesh->);
87 (ac_no->nb_segment)--;
88 free(liste_quad);
89 (mesh->nb_segment)--;
90 }