GDI-D: Tore de Moebius en format OBJ

Soyez le premier à donner votre avis sur cette source.

Vue 852 fois - Téléchargée 249 fois

Description

[Version avec image de capture qui remplace celle du 29.01.2018]

Bonjour,

Extension de l'article "CodeS-SourceS: GDI-D: Tore de Moebius interactivement paramétré".

Avant de coder des affichages directs plus intéressants pour notre tore, il peut être séduisant de créer le polyèdre sous forme de modèle 3D standard et simple.
Puis de pouvoir l'afficher avec un "Viewer 3D" de votre choix (OMV, 3D Builder, Paint 3D, Visionneuse de réalité mixte, ...).

La différence principale par rapport à l'article précité est l'ajout de la fonction Write dans la structure Tore:
  void Write(Edit *ed,float R,float r) {char s[256];
    uint nn=Nr*NR,*ir=new uint[Nr+1],*jr=new uint[Nr+1];
    sprintf_s(s,"# CodeS-SourceS: Tore de Moebiusrn"
      "# par William Voirol, Jan 2018rn# Tore: NR=%u, Nr=%u, Nc=%i"
      "rn# R=%7.3f, r=%7.3frn#rn# %u Sommets:rn#",NR,Nr,Nc,R,r,nn);
    std::string str=s;
    for (uint k=0; k<nn; ++k) // Sommets
      {sprintf_s(s,"rnv %9.3f %9.3f %9.3f",X[k],Y[k],Z[k]); str.append(s);}
    for (uint n=0; n<=Nr; ++n) ir[n]=nn+1-Nr+(nn+n-Nc-1)%Nr;
    if (Nc) sprintf_s(s,"rn#rn# %u Triangles:rn#",2*nn);
    else sprintf_s(s,"rn#rn# %u Rectangles:rn#",nn);
    str.append(s);
    for (uint k=0; k<nn; k+=Nr) { // Faces
      jr[0]=k+Nr; for (uint n=1; n<=Nr; ++n) jr[n]=k+n;
      for (uint n=0; n<Nr; ++n) {
        if (Nc>0) sprintf_s(s,"rnf %u %u %urnf %u %u %u"
          ,ir[n+1],ir[n],jr[n],jr[n],jr[n+1],ir[n+1]);
        else if (Nc<0) sprintf_s(s,"rnf %u %u %urnf %u %u %u"
          ,jr[n+1],ir[n+1],ir[n],ir[n],jr[n],jr[n+1]);
        else sprintf_s(s,"rnf %u %u %u %u",ir[n+1],ir[n],jr[n],jr[n+1]);
        str.append(s);
      }
      for (uint n=0; n<=Nr; ++n) ir[n]=jr[n];
    }
    str.append("rn#rn# END Tore"); ed->ClearWrite(&str[0]); ed->SelectAll();
    str.clear(); delete ir,jr;
  }

Remarquez la "subtilité" lors de l'écriture des faces:
Lorsque la torsion est nulle (Nc=0), on forme des rectangles car ils sont toujours plans (non voilés).
Sinon, la triangulation se fait en utilisant la "diagonale 3D" la plus courte du (pseudo) rectangle; et l'affichage sera donc différent selon que le nombre de crans Nc est positif ou négatif.

La génération du texte OBJ avec NR=128 et Nr=32, c'est-à-dire de 4096 sommets et 8192 triangles, ne prends qu'un "clin d'œil".

Pour "récupérer" ce code généré, immédiatement après l'activation du bouton OBJ, clic dans la barre de titre ou la barre de défilement de la fenêtre Edit pour sélectionner le texte complet; puis Ctrl-C.

Observez quelques images du Zip !


Bonne lecture ...

Liens

WikipédiA: Tore
WikipédiA: Ruban de Möbius
CodeS-SourceS: Pour afficher un modèle 3d
CodeS-SourceS: GDI+D: Scène 3D interactive
CodeS-SourceS: GDI-D: Tore de Moebius interactivement paramétré

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Commenter la réponse de William VOIROL

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.