Une petite figure

Tout ce qui concerne l'utilisation ou l'installation d'Asymptote.

Modérateur: gdm_asy

Règles du forum
Merci d'éviter le style SMS dans vos messages et de penser à utiliser la fonction Recherche avant de poster un message. Pour joindre des fichiers à vos messages, consulter ce sujet.
> Penser à utiliser les balises Code pour poster du code.

Une petite figure

Messagepar OG » Vendredi 03 Avril 2015, 13:57

Bonjour

Sur tex.stackexchange il y a quelques questions sur Asymptote. Celle-ci http://tex.stackexchange.com/questions/ ... th-surface était amusante car il fallait recoller suffisamment régulièrement deux donuts ou deux tores et pas seulement les juxtaposer. En théorie c'est une équation implicite assez tordue qui va bien au delà des capacités d'Asymptote (il n'y a pas encore de module mathematica :) ). Sans détailler les explications, grosso modo j'ai modifié la paramétrisation du donut sur une des parties avec une fonction bien choisie empiriquement qui donne un recollement $C^1$ (et pas $C^2$). Un peu de calcul et ça marche. Il y a avait aussi un problème de paramétrisation pour faire une surface bien lisse (j'ai fait deux versions en fait). Avec un peu de chances voici le code.

Code: Tout sélectionner
size(200);
import graph3;

currentprojection=perspective(5,4,4);

real R=3;
real a=1;

triple f(pair t) {
  triple z;
  z= ((R+a*cos(t.y))*cos(t.x),(R+a*cos(t.y))*sin(t.x),a*sin(t.y));
  return z;
}


bool active(pair pos) {return (R+a*cos(pos.y))*cos(pos.x)<=3.2;}
bool active2(pair pos) {return (R+a*cos(pos.y))*cos(pos.x)>=-3.2;}

surface s=surface(f,(0,0),(2pi,2pi),200,200, active);
surface ss=shift((2*R+2*a,0,0))*surface(f,(0,0),(2pi,2pi),200,200,active2);

draw(s,green,render(compression=Low,merge=true));
draw(ss,green,render(compression=Low,merge=true));

triple f11 (pair z)
{
  real y,ty,x;
  if (z.y>=0)
    {
      x=z.x+1/2*(z.x+R)^2/a;
      y=sqrt(z.y)*sqrt((R+a)^2-x*x);
    }
  else
    {
      x=z.x+1/2*(z.x+R)^2/a;
      y=-sqrt(abs(z.y))*sqrt((R+a)^2-x*x);
    }
  return (-z.x,y,sqrt(a^2-(R-sqrt((x)^2+y^2))^2));
}

triple f12(pair z)
{
  triple z=f11(z);
  return (z.x,z.y,-z.z);
}

triple f21(pair z)
{
  triple z=f11(z);
  return (-z.x,z.y,z.z);
}
triple f22(pair z)
{
  triple z=f11(z);
  return (-z.x,z.y,-z.z);
}
int N=100;
surface st=surface(f11,(-R-a,-1),(-R,1),N,N);
surface sst=surface(f12,(-R-a,-1),(-R,1),N,N);
surface sstb=shift((2*R+2*a,0,0))*surface(f21,(-R-a,-1),(-R,1),N,N);
surface sstbm=shift((2*R+2*a,0,0))*surface(f22,(-R-a,-1),(-R,1),N,N);
surface pont1=surface(st,sst,sstb,sstbm);
draw(pont1,green);//blue);


et la figure

h16.png


bon week-end
O.G.
OG
Modérateur
 
Messages: 2179
Inscription: Lundi 12 Mars 2007, 11:20
Localisation: Rouen
Statut actuel: Actif et salarié | Maître de conférence

Publicité

Re: Une petite figure

Messagepar MB » Dimanche 05 Avril 2015, 11:36

Merci pour le partage. Le résultat est visuellement très agréable en tous cas. :D
MB (Pas d'aide en Message Privé)
Merci d'utiliser $\LaTeX$ (voir ici) et d'éviter le style SMS pour la lisibilité des messages.
MB
Administrateur
 
Messages: 6744
Inscription: Samedi 28 Mai 2005, 13:23
Localisation: Créteil
Statut actuel: Actif et salarié | Enseignant


Retourner vers Asymptote

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités