% TeXgraph version 1.93 % Fenetre Xmin Xmax Ymin Ymax Xscale Yscale 100#-7#7#-7#7#0.85714285714285#0.85714285714285## % Marges gauche droite haut bas cadre gestion_couleur comptgraph 101#0#0#0#0#0#1#2## % Affectation des Variables theta et phi 18##[theta:=0.5236, phi:=1.0472, OriginalCoord(1)]## % Déclaration des Macros 16#rotCurve#{rotCurve( f(t) ,Axe, uMin, uMax [, angleMin, angleMax [, uNbLignes, vNbLignes]]) où Axe=[point3D, point3D]} [$angleMin:=if nil(%5) then -pi else %5 fi, $angleMax:=if nil(%6) then pi else %6 fi, GetSurface( [if v=angleMin then Assign(%1,t,u) fi, rot3d(%1,%2,v)], %3+i*%4, {intervalle pour u} angleMin+i*angleMax, {pour v} if nil(%7) then 25 else %7 fi+i*(if nil(%8) then 25 else %8 fi) {nb lignes} )]## 16#curveTube#{curveTube(f(t), rayon, tMin,tMax, [uNbLignes, vNbLignes]) } GetSurface( [ if v=-pi then Assign(%1, t, u), $A:=%1, Assign(%1, t, u+0.0001),$P1:=%1, $X:=\normalize(10000*(A-P1)), $U:=\prodvec(X,\n), A':=%2*\normalize(U), $vec:=\prodvec(X,A') fi, A+cos(v)*A'+sin(v)*vec], {paramétrage} %3+i*%4, {uMin+i*uMax} pi*(-1+i), {vMin+i*vMax} if nil(%5) then 25 else %5 fi+i*(if nil(%6) then 25 else %6 fi) )## 16#cone#{cone(sommet, vecteur axe, rayon, nb facettes)} [ $R:=%3, $vect:=\normalize(%2), $centre:= %1+%2, $nb:=%4+1, $pas:= 2*pi/(nb-1), S:= {liste des sommmets} [ %1, $u:=0, $v1:=R*\prodvec(vecK,vect), if norm(v1)=0 then $v1:=R*vecI fi, $v2:=\prodvec(vect,v1), for $k1 from 1 to nb do centre+cos(u)*v1+sin(u)*v2, Inc(u,pas) od], $F:= {liste des faces } [for k2 from 2 to nb do k2+1,k2,1,jump od], MakePoly(S,F)]## 16#cylindre#{ cylindre( somment, vecteur axe, rayon, nb facettes)} [$R:=%3, $vect:=\normalize(%2), $centre2:=%1+%2, $nb:=%4+1, $pas:= 2*pi/(nb-1), S:= {liste des sommmets} [ $u:=0, $v1:=R*\prodvec(vecK,vect), if norm(v1)=0 then $v1:=R*vecI fi, $v2:=\prodvec(vect,v1), for $k1 from 1 to nb do %1+cos(u)*v1+sin(u)*v2, Inc(u,pas) od, u:=0, for $k1 from 1 to nb do centre2+cos(u)*v1+sin(u)*v2, Inc(u,pas) od], $F:= {liste des faces } [for k2 from 1 to nb-1 do k2,k2+1,k2+1+nb,k2+nb,jump od], MakePoly(S,F)]## 16#section#{section( plan, liste facettes): clippe la liste de facettes avec le plan [A,u], renvoie la liste des facettes incluses dans le meme demi-plan que u} ClipFacet(%2,%1)## 16#axes3d#{ axes3d(): très sommaire!} [i*Yinf,0,i*Ysup,0,jump, Xinf,0,Xsup,0,jump, 0,Zinf,0,Zsup,jump]## 16#viewDir#{ viewDir(direction observateur) } [$u:=\normalize(%1), phi:=arccos(\Zde(u)), theta:=Arg(\pxy(u)) ]## 16#getplan#{ getplan([A,u] <,scale>): renvoie une facette correspondant au plan intersecté avec le cube de base} [$cube:=Parallelep([Xinf+i*Yinf,Zinf], (Xsup-Xinf)*vecI,(Ysup-Yinf)*vecJ, (Zsup-Zinf)*vecK), $scale:=if nil(%2) then 1 else %2 fi, if not(scale=1) then $C:=[Xsup+Xinf+i*(YSup+Yinf),Zsup+Zinf]/2, cube:=hom3d(cube,C,scale), fi, $aux:=Intersection(%1,cube,$face), face ]## 16#planEqn#{ planEqn(a,b,c,d): renvoie le plan d'équation ax+by+cz=d sous la forme [A,u] } [$a:=%1, $b:=%2, $c:=%3,$d:=%4, $u:=[a+i*b,c], if abs(a)>0 then [d/a,0,u] elif abs(b)>0 then [i*d/b,0,u] elif abs(c)>0 then [0,d/c,u] fi ]## 16#getdroite#{ getdroite([A,u] <,scale>): renvoie un segment correspondant à la droite [A,u] intersectée avec le cube de base} [$A:=interDP(%1,[0,Zinf,vecK]), if nil(A)=0 then $B:=interDP(%1,[0,Zsup,vecK]), $L:=Clip3DLine([A,B], [Xinf,0,vecI]), $L:=Clip3DLine(L, [Xsup,0,-vecI]), $L:=Clip3DLine(L, [i*Yinf,0,vecJ]), $L:=Clip3DLine(L, [i*Ysup,0,-vecJ]), else A:= interDP(%1,[Xinf,0,vecI]), if nil(A)=0 then B:=interDP(%1,[Xsup,0,vecI]), $L:=Clip3DLine([A,B], [0,Zinf,vecK]), $L:=Clip3DLine(L, [0,Zsup,-vecI]), $L:=Clip3DLine(L, [i*Yinf,0,vecJ]), $L:=Clip3DLine(L, [i*Ysup,0,-vecJ]), else A:=interDP(%1,[i*Yinf,0,vecJ]), B:=interDP(%1,[i*Ysup,0,vecJ]), $L:=Clip3DLine([A,B], [0,Zinf,vecK]), $L:=Clip3DLine(L, [0,Zsup,-vecI]), $L:=Clip3DLine(L, [Xinf,0,vecI]), $L:=Clip3DLine(L, [Xsup,0,-vecI]), fi fi, $scale:=if nil(%2) then 1 else %2 fi, if not(scale=1) then hom3d(L,(L[1,2]+L[3,2])/2,scale),jump else L,jump fi ]## 16#lineTube#{LineTube(L, rayon, nb faces <,closed>)} [$closed:=if nil(%4) then 0 else %4 fi, MapBy( [$b:=1/0, $c:=1/0, $liste:=1/0, $firstListe:=1/0, Map3D( [$a:=b, b:=c, c:=$m, if nil(a) then if nil(b)=0 then $u:=\prodvec(b-c,vecI), if \norm(u)=0 then $u:=\prodvec(b-c,vecJ) fi, u:=%2*\normalize(u), $b':=b+u, liste:=[b',for $k from 1 to %3-1 do \rot3d(b',[b,c-b],2*k*pi/%3) od], firstListe:=liste, if not(closed) then [b',for $k from 1 to %3-1 do \rot3d(b',[b,-c+b],2*k*pi/%3) od],jump fi fi else $P:=[b,c-a], $liste':=\proj3dO(liste,P,b-a), for k from 1 to %3-1 do liste[2*k-1,2],liste[2*k+1,2],liste'[2*k+1,2],liste'[2*k-1,2],jump od, liste[2*%3-1,2],liste[1,2],liste'[1,2],liste'[2*%3-1,2],jump, liste:=liste' fi ], m,$L), P:=[c,b-c], liste':=\proj3dO(liste,P,b-c), for k from 1 to %3-1 do liste[2*k-1,2],liste[2*k+1,2],liste'[2*k+1,2],liste'[2*k-1,2],jump od, liste[2*%3-1,2],liste[1,2],liste'[1,2],liste'[2*%3-1,2],jump, if closed then for k from 1 to %3-1 do liste'[2*k-1,2],liste'[2*k+1,2],firstListe[2*k+1,2],firstListe[2*k-1,2],jump od, liste'[2*%3-1,2],liste'[1,2],firstListe[1,2],firstListe[2*%3-1,2],jump else liste',jump fi ], L,%1,jump)]## 16#grille3d#{grille3d(unite), dessine les trois plans de fond sous forme d'une grille} [$unite:=if nil(%1) then 1 else %1 fi, for $x from Xinf to Xsup step unite do [x+i*Yinf,Zsup],[x+i*Yinf,Zinf],[x+i*Ysup,Zinf],jump od, for $y from Yinf to Ysup step unite do [Xinf+i*y,Zsup],[Xinf+i*y,Zinf],[Xsup+i*y,Zinf],jump od, for $z from Zinf+unite to Zsup step unite do [Xinf+i*Ysup,z],[Xinf+i*Yinf,z],[Xsup+i*Yinf,z],jump od ]## % Déclaration des Eléments graphiques % objet2 (Utilisateur) 14#objet2#[ view(-7,7,-7,7), Marges(0,0,0,0), size(12,1), background(full,beige), H:=5, R:=4, a:=2, Plan:=[M(a,0,0),vecI], C1:=cone(Origin, H*vecK,R,45), C2:=cone(Origin, -H*vecK,R,45), L1:=Intersection(Plan,C1), L2:=Intersection(Plan,C2), Asymp1:=getdroite( [M(a,0,0),M(0,R,H)] ), Asymp2:=getdroite( [M(a,0,0),M(0,-R,H)] ), Build3D([1, Rgb(0.74,1,0.73)+0.9*i,getplan(Plan)], [1, Rgb(0.73,0.74,1),C1,C2], [2,darkgreen,12, Asymp1,Asymp2], [2,0,8,axes3d()], ), Display3D(), Color:=red, Width:=8, DrawAretes([L1,L2],0), Color:=black, Arrows:=1, LineStyle:=dotted, Axes3D(0,0,0) ] #-1##