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

Soyez le premier à donner votre avis sur cette source.

Vue 4 fois - Téléchargée 2 fois

Description

Bonjour,

▼▼Bug CCM-CS: voir ci-dessous▼▼

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
 
 

Bug CCM-CS: Charger une image

Depuis le 14 oct. 2017, personne ne peut déposer un code avec une image comme on est pourtant invité à le faire (voir par exemple: Liste des derniers codes sources).
A mon avis, ces images de capture sont très importantes !

En attendant, je mets cette image à disposition dans le fichier Capture.jpg du Zip, et demande au lecteur de m'excuser pour cette complication.

Je me permets de signaler ici ce bug d'une manière peu conventionnelle, car malgré bien des demandes, les "responsables" sont restés muets (voir: Discussion: Charger une image).

Dans tous les articles, j'enlèverai toute référence à ce bug dès qu'il sera de nouveau possible de charger une image (de capture) pour les articles existants et nouveaux.
 
 

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.