GDI-D: Tore de Moebius interactivement paramétré

Soyez le premier à donner votre avis sur cette source.

Vue 638 fois - Téléchargée 102 fois

Description

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

Bonjour,

Voici un autre "objet" paramétré et visualisé avec notre Scène 3D interactive.

Un tore désigne le volume engendré par la rotation d'un cercle de rayon r autour d'une droite affine D située dans son plan à une distance R de son centre.
x = (R + r*cos(a))*cos(A)
y = (R + r*cos(a))*sin(A)
z = r*sin(a)

Construction

Dans notre cas, les cercles sont en fait des polygones réguliers.
Le grand cercle est subdivisé en NR et le petit en Nr segments.

L'effet Moebius est obtenu en "tordant", lors d'un tour du grand cercle, le polygone régulier de section (petit cercle) d'un ou plusieurs crans en avant ou en arrière.
Tous ces calculs sont faits avec la fonction XYZ de la struct Tore (voir fichier Tore.h):
struct Tore {
  const float Pi2=6.2831853f;
  uint NR=0,Nr=0; // Nombre de segments du grand/petit cercle
  int Nc; // Nombre de "crans"
  float *rX,*rY,*Xa,*Ya,*cA,*sA,*X,*Y,*Z;
  // ...
  void XYZ(float R,float r,int nc) {
    Nc=nc;
    float a=Pi2*nc/Nr/NR,cC=cosf(a),sC=sinf(a); // Angle de torsion
    for (uint n=0; n<Nr; ++n) {rX[n]=r*Xa[n]; rY[n]=r*Ya[n];}
    for (uint N=0,k=0; N<NR; ++N) {
      float ca=cA[N],sa=sA[N];
      for (uint n=0; n<Nr; ++n,++k) {
        float x=rX[n],y=rY[n];
        X[k]=(R+x)*ca; Y[k]=(R+x)*sa; Z[k]=y;
        rX[n]=cC*x-sC*y; rY[n]=sC*x+cC*y; // Torsion
      }
    }
  }
  // ...
}

Affichage

Le dessin est réalisé par visualisation fil de fer ou wire-frame display, sans aucun traitement des lignes cachées.

Sa rapidité fait que les changements interactifs des paramètres se voient en quasi animation, sans scintillement.

Mais manifestement, l’affichage demande à s’améliorer …

Le petit bouton O | Ø permet d'afficher (ou non) les petits polygones de section.


Bonne lecture ...

Liens

WikipédiA: Tore
WikipédiA: Ruban de Möbius
CodeS-SourceS: GDI+A: Déplacement avec la souris
CodeS-SourceS: GDI+B: Move et Zoom avec la souris
CodeS-SourceS: GDI+C: Dessin sans scintillement
CodeS-SourceS: GDI+D: Scène 3D interactive

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.