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] |