Subversion Repositories wimsdev

Rev

Rev 981 | Rev 4158 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
20 reyssat 1
 
981 bpr 2
!if $wims_read_parm!=slib_header
20 reyssat 3
 !goto proc
4
!endif
5
slib_title=Polyedron in flydraw
6
slib_parms=5
7
,name of polyedre\
8
,phi\
9
,theta\
10
,size\
11
,coordonnates of the center
12
 
13
slib_author=Bernadette PERRIN-RIOU
14
slib_out=code for draw of drawing a polyhedron using the projection given par the spherical/
15
coordonnates phi and theta
16
slib_comment=
3265 bpr 17
slib_require=pari
20 reyssat 18
 
19
!exit
20
 
21
:proc
22
 
23
 
24
!distribute item $wims_read_parm into slib_polyedre,slib_phi,slib_theta,slib_size,slib_G,slib_option
25
slib_G=!declosing $slib_G
26
 
27
!if d isin $slib_option
28
	slib_line=dlines
29
!else
30
	slib_line=lines
31
!endif
32
 
33
slib_polyedre=!record  0 of data/polyedre_off/$slib_polyedre.off
34
slib_H=1
35
slib_u=!line 1 of $slib_polyedre
36
slib_nom=!replace internal # by $empty in $slib_u
37
!while # isin $slib_u
38
!advance slib_H
39
slib_u=!line $slib_H of $slib_polyedre
40
!endwhile
41
 
42
!distribute word $slib_u into slib_S_cnt, slib_F_cnt, slib_A_cnt
43
 
44
slib_sommet=!line $[$slib_H+1] to $[$slib_H+$slib_S_cnt] of $slib_polyedre
45
 
46
 
47
slib_sommet=!nonempty lines $slib_sommet
48
 
49
slib_arete=!line $[$slib_H+$slib_S_cnt+$slib_F_cnt+1] to $[$slib_H+$slib_S_cnt+$slib_F_cnt+$slib_A_cnt] of $slib_polyedre
50
slib_arete=!nonempty line $slib_arete
51
slib_arete=!nonempty line $slib_arete
52
 
53
slib_sommet=!nonempty lines $slib_sommet
54
slib_sommet=!replace internal $\
55
$ by ; in $slib_sommet
56
slib_sommet=!singlespace $slib_sommet
57
 
58
slib_sommet=!words2items $slib_sommet
59
slib_sommet =!replace internal ;, by ; in $slib_sommet
60
 
61
slib_Sommet=!exec pari $slib_size*Mat([$slib_sommet]~)
62
 
63
slib_SommetP=!exec pari slib_G=Vec([$slib_G]);M = Mat([$slib_Sommet]);\
64
T=matrix(3,$slib_S_cnt,i,j,slib_G[i]+0.5);\
65
slib_a=cos($slib_phi); slib_b=sin($slib_phi); slib_c=cos($slib_theta); slib_d=sin($slib_theta);\
66
P = Mat([slib_a*slib_c,-slib_d,-slib_b*slib_c;slib_a*slib_d,slib_c,-slib_b*slib_d;slib_b,0,slib_a]);\
67
vecextract(mattranspose(P^(-1)*M+T),[2,3])
68
 
69
slib_axe=!exec pari vecextract(mattranspose( $slib_size*P^(-1)+matrix(3,3,i,j,slib_G[i]+0.5)),[2,3])
70
 
71
 
72
 
73
slib_axe=!translate internal ; to $\
74
$ in $slib_axe
75
!distribute line $slib_axe into slib_ox, slib_oy, slib_oz
76
 
77
 
78
slib_SommetP =!translate internal ; to $\
79
$ in $slib_SommetP
80
slib_SommetP=!nonempty items $slib_SommetP
81
 
82
slib_S=!column 1 of $slib_SommetP
83
slib_S=!nonempty items $slib_S
84
slib_S=!sort numeric item $slib_S
85
slib_maxx=!item -1 of $slib_S
86
slib_minx=!item 1 of $slib_S
87
slib_rangex=$[$slib_maxx-($slib_minx)]
88
slib_S=!column 2 of $slib_SommetP
89
slib_S=!nonempty items $slib_S
90
slib_S=!sort numeric item $slib_S
91
slib_S=!sort numeric item $slib_S
92
slib_maxy=!item -1 of $slib_S
93
slib_miny=!item 1 of $slib_S
94
slib_rangey=$[$slib_maxy-($slib_miny)]
95
 
96
slib_range=$[max($slib_rangex,$slib_rangey)*0.7]
97
slib_rangex1=$[($slib_maxx+($slib_minx))/2 - $slib_range]
98
slib_rangex2=$[($slib_maxx+($slib_minx))/2 + $slib_range]
99
slib_rangey1=$[($slib_maxy+($slib_miny))/2 - $slib_range]
100
slib_rangey2=$[($slib_maxy+($slib_miny))/2 + $slib_range]
101
 
102
!if 0 isin $slib_option
103
  slib_out=xrange $slib_rangex1,$slib_rangex2\
104
yrange $slib_rangey1,$slib_rangey2
105
!else
106
  slib_out = $slib_rangex1,$slib_rangex2,$slib_rangey1,$slib_rangey2
107
!endif
108
 
109
slib_out=$slib_out\
110
arrow 0,0,$slib_ox,8,black\
111
text black,$slib_ox,medium,x\
112
arrow 0,0,$slib_oy,8,black\
113
text black,$slib_oy,medium,y\
114
arrow 0,0,$slib_oz,8,black\
115
text black,$slib_oz,medium,z
116
 
117
!for slib_j = 1 to $slib_S_cnt
118
  slib_S=!line $slib_j of $slib_SommetP
119
  slib_out=$slib_out\
120
  disk  $slib_S, 8,red
121
!next slib_j
122
 
123
!for slib_j = 1 to $slib_A_cnt
124
  slib_S1 = !line $slib_j  of $slib_arete
125
  slib_S2= !word 2 of $slib_S1
126
  slib_S1= !word 1 of $slib_S1
127
  slib_S1=$[$slib_S1+1]
128
  slib_S2=$[$slib_S2+1]
129
  slib_S1=!line $slib_S1 of $slib_SommetP
130
  slib_S2=!line $slib_S2 of $slib_SommetP
131
 
132
  slib_out=$slib_out\
133
  $slib_line red, $slib_S1, $slib_S2
134
!next slib_j
135
 
136
 
137
slib_out =!nonempty line $slib_out
138
 
139
slib_out=[$slib_out],[$slib_SommetP]