Asymptote: transformation 3D générale

Bonjour,

Peut-on définir sa propre transformation 3D (transform3) avec Asymptote ? Je n'ai rien vu de tel dans les documentations, seulement des transformations déjà définies ("built-in").

Réponses

  • Oui c'est un tableau 4x3.

    Voir ici un exemple : transform3
  • Bonjour,

    Avec Asymptote, je voudrais le tore centré en $(0,0,0)$ et tel que son équateur est dans le plan $z=0$, de rayon majeur $1$ et de petit rayon de mon choix. Comment faire ?
    J'ai trouvé ce code pour avoir un tore, mais je ne le comprends pas:
    surface torus = surface(Circle(c=Y,normal=X,r=0.1,n=32), c=O, axis=Z, n=32);
    
    Je ne sais pas encore comment avoir les axes sur la figure, du coup je ne peux même pas vérifier si ce tore est centré.
  • Bonjour,
    Désolée de ne pouvoir vous aider pour asymptote mais vous devriez tout de même trouver votre solution dans cette page, non (Je trouve Tikz si chouette)tore en tikz et autres.
    Cordialement,
    Aline
  • Merci Aline. J'ai déjà vu cette page mais cela ne m'a pas aidé (j'ai peut-être regardé trop vite).

    La question m'intéresse encore mais ceci dit j'ai réussi à faire ce que je voulais : un tore dont l'équateur passe par trois points donnés.

    Sur cette figure je fais ce tore pour chaque face d'un tétraèdre.77272
  • TikZ permet-il d'appliquer une transformation à un objet 3D ? (une transformation quelconque que je définirais moi-même, pas une "built-in"). Dans ce cas je ferais bien la version TikZ.
  • Autre question sur Asymptote. Ce code marche :
    draw(mytransfo(A,B,C)*torus,green,render(compression=Low,merge=true));
    draw(mytransfo(A,B,D)*torus,blue,render(compression=Low,merge=true));
    draw(mytransfo(A,C,D)*torus,red,render(compression=Low,merge=true));
    draw(mytransfo(B,C,D)*torus,yellow,render(compression=Low,merge=true));
    

    Par contre ce code ne marche pas:
    transform3 mat1 = mytransfo(A,B,C);
    transform3 mat2 = mytransfo(A,B,D);
    transform3 mat3 = mytransfo(A,C,D);
    transform3 mat4 = mytransfo(B,C,D);
    draw(mat1*torus,green,render(compression=Low,merge=true));
    draw(mat2*torus,blue,render(compression=Low,merge=true));
    draw(mat3*torus,red,render(compression=Low,merge=true));
    draw(mat4*torus,yellow,render(compression=Low,merge=true));
    

    On dirait qu'avec ce code on a mat1=mat2=mat3=mat4 (je n'obtiens qu'un tore au lieu de quatre). Une idée du pourquoi ?
  • Si cela fonctionne comme avec Metapost (et il me semble que Asymptote utilise Metapost) je pense qu'il faut "protéger" tes variables "mat1,etc" sinon ces matrices sont remplacées par la dernière...
    Mais je ne sais pas comment faire cette protection en Asymptote.
  • En effet c'est ce qui se passe. Bizarre comme comportement !
    Je n'ai pas essayé mais ceci devrait marcher :
    transform3 mat1 = mytransfo(A,B,C);
    draw(mat1*torus,green,render(compression=Low,merge=true));
    transform3 mat2 = mytransfo(A,B,D);
    draw(mat2*torus,blue,render(compression=Low,merge=true));
    ......
    
Connectez-vous ou Inscrivez-vous pour répondre.