26 oct. 2007

Asymptote using three.asy – fig0040

Figure 0004
(Compiled with Asymptote version 2.14svn-r5318)
    
import three;
size(8cm,0);
real radius=1, theta=37, phi=60;

currentprojection=perspective(4,1,2);

// Planes
pen bg=gray(0.9)+opacity(0.5);
draw(surface((1.2,0,0)--(1.2,0,1.2)--(0,0,1.2)--(0,0,0)--cycle),bg,bg);
draw(surface((0,1.2,0)--(0,1.2,1.2)--(0,0,1.2)--(0,0,0)--cycle),bg,bg);
draw(surface((1.2,0,0)--(1.2,1.2,0)--(0,1.2,0)--(0,0,0)--cycle),bg,bg);

real r=1.5;
draw(Label("$x$",1), O--r*X, Arrow3(HookHead3));
draw(Label("$y$",1), O--r*Y, Arrow3(HookHead3));
draw(Label("$z$",1), O--r*Z, Arrow3(HookHead3));
label("$\rm O$", (0,0,0), W);

triple pQ=radius*dir(theta,phi); // Point Q
// triple pQ=radius*expi(radians(theta),radians(phi)); // Point Q
draw(O--radius*dir(90,phi)^^O--pQ, dashed);
dot("$R*\mathrm{dir}\left(\theta,\phi\right)$",pQ);

// Arcs
draw("$\theta$", reverse(arc(O,0.5*pQ,0.5*Z)), N+0.3E, Arrow3(HookHead2));
draw("$\phi$", arc(O,0.5*X,0.5*(pQ.x,pQ.y,0)), N+0.3E, Arrow3(HookHead2));

path3 p3=O--arc(O,radius,0,phi,90,phi)--cycle;
draw(surface(p3), blue+opacity(0.5));

  • Facebook
  • Google Bookmarks
  • LinkedIn
  • Twitter
  • Yahoo! Bookmarks

Mots-clefs : , , , ,

4 Réponses à “Asymptote using three.asy – fig0040”

Flux RSS de ces commentaires rss

  1. cjorssen a dit:

    Bonjour,

    Tout d'abord, merci pour ces exemples, réellement très intéressant pour comprendre asy.

    J'aimerais pouvoir faire apparaître les vecteurs unitaires de la base sphérique locale. Ne maîtrisant pas encore du tout le langage, je ne vois pas trop comment faire. Pourriez-vous me mettre sur la voie.

    Merci d'avance.

    • Admin
      Ph. Ivaldi a dit:

      Bonjour et merci pour vos encouragements.
      Ce code répond-il à votre question ?

      triple rl(real t, real p) {
        return (cos(t)*sin(p),sin(t)*sin(p),cos(p));
      }
      triple tl(real t, real p) {
        return (-sin(t),cos(t),0);
      }
      triple pl(real t, real p) {
        return (cos(t)*cos(p),sin(t)*cos(p),-sin(p));
      }
      
      draw(pQ--(pQ+rl(theta,phi)),Arrow3);
      draw(pQ--(pQ+tl(theta,phi)),Arrow3);
      draw(pQ--(pQ+pl(theta,phi)),Arrow3);
      
      • cjorssen a dit:

        Merci de votre réponse, c'est bien ce que je cherche. J'ai néanmoins l'impression que ça ne donne pas le résultat voulu (n'y aurait-il pas une inversion entre theta et phi ?). Enfin, cela me donne une bonne base de travail : merci.

        Petite remarque. Dans les commentaires, les — (doubles tirets) sont transformés en – (long tiret), ce qui pour du code peut être gênant.

        • Admin
          Ph. Ivaldi a dit:

          > n’y aurait-il pas une inversion entre theta et phi ?

          Oui, c'est possible… ;-)

          > Dans les commentaires, les — (doubles tirets) sont transformés en –
          > (long tiret), ce qui pour du code peut être gênant.

          J'ai enfin pris le temps de corriger le problème. Merci pour cette remarque.