[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
Commentaires
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.