Section d'un cube par un plan

Tout ce qui concerne le langage Asymptote. Ce langage est utilisable sur le forum via les balises asy.
[participation réservée aux utilisateurs inscrits]
Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
loicwood
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 121
Inscription : dimanche 23 octobre 2011, 11:24
Localisation : Souppes sur Loing

Section d'un cube par un plan

Message non lu par loicwood »

Bonsoir,

j'essaie de représenter la section d'un cube par un plan en 3D. Pour l'instant, ma figure ressemble à cela :

Code : Tout sélectionner

settings.render=0;
settings.outformat='pdf';
settings.tex="pdflatex";
settings.prc=true;

size(15cm,0);
import solids;
import three;
import math;

currentprojection = orthographic(50,50,25);

nslice=4*nslice;

real a=5, l=0.5;

triple pA=(-a,-a,-a), pB=(a,-a,-a), pC=(a,a,-a), pD=(-a,a,-a), pE=(-a,-a,a), pF=(a,-a,a), pG=(a,a,a), pH=(-a,a,a);

draw(pA--pB--pC--pD--pH--pE--pF--pG--pC);
draw(pD--pA--pE);
draw(pB--pF);
draw(pC--pG--pH);


triple pI=1/2*(pA+pB), pJ=1/2*(pF+pG), pK=1/2*(pA+pE), pL=1/2*(pC+pG), pM=1/2*(pG+pH), pN=1/2*(pD+pH), pP=1/2*(pF+pB), pQ=1/2*(pE+pH);

triple vectAH=pH-pA, vectAJ=pJ-pA, vectHJ=pJ-pH, vectmid=1/2*(vectAH+vectAJ);

triple pt1=pA+(l+0.5)*vectHJ-l*vectmid, pt2=pA-(l+0.5)*vectHJ-l*vectmid, pt3=pH-l*vectHJ+l*vectmid, pt4=pJ+l*vectHJ+l*vectmid;

path3 planAHJ=pt1--pt2--pt3--pt4--cycle;

//path3 planAHJ=plane(2*vectAH,2*vectAJ,pA);

draw(surface(planAHJ),red+opacity(0.2));

path3 faceABCD=pA--pB--pC--pD--cycle;
path3 faceABFE=pA--pB--pF--pE--cycle;
path3 faceBCGF=pB--pC--pG--pF--cycle;
path3 faceADHE=pA--pD--pH--pE--cycle;
path3 faceEFGH=pE--pF--pG--pH--cycle;
path3 faceCDHG=pC--pD--pH--pG--cycle;

draw(surface(faceABCD),blue+opacity(0.25));
draw(surface(faceABFE),blue+opacity(0.25));
draw(surface(faceBCGF),blue+opacity(0.25));
draw(surface(faceADHE),blue+opacity(0.25));
draw(surface(faceEFGH),blue+opacity(0.25));
draw(surface(faceCDHG),blue+opacity(0.25));

dot(Label("$A$",align=SW),pA);
dot(Label("$B$",align=SE),pB);
dot(Label("$C$",align=SE),pC);
dot(Label("$D$",align=NW),pD);
dot(Label("$E$",align=SW),pE);
dot(Label("$F$",align=SE),pF);
dot(Label("$G$",align=NE),pG);
dot(Label("$H$",align=NW),pH);
dot(Label("$I$",align=S),pI);
dot(Label("$J$",align=SE),pJ);
dot(Label("$K$",align=W),pK);
dot(Label("$L$",align=E),pL);
dot(Label("$M$",align=N),pM);
dot(Label("$N$",align=W),pN);
dot(Label("$P$",align=E),pP);
dot(Label("$Q$",align=NW),pQ);

Est-il possible de construire des segments représentant les intersections des différentes faces du cube par le plan (AHJ) ? J'ai du mal à comprendre comment fonctionne la commande intersect (ou intersections etc).

Autre question : comment arriver à avoir dès le départ une vue en 3D correcte (que mettre comme nombres dans currentprojection = orthographic(50,50,25) ) ?

Merci.
chellier
Modérateur honoraire
Modérateur honoraire
Messages : 355
Inscription : samedi 25 juillet 2009, 12:25
Localisation : Le Creusot
Contact :

Re: Section d'un cube par un plan

Message non lu par chellier »

Bonjour,
Ce n'est pas très "simple". J'avais essayé de faire quelque chose ici : viewtopic.php?p=126743#p126743

Christophe
loicwood
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 121
Inscription : dimanche 23 octobre 2011, 11:24
Localisation : Souppes sur Loing

Re: Section d'un cube par un plan

Message non lu par loicwood »

Bonsoir,

la solution donnée fonctionne correctement sur les quelques exemples que j'ai traités. Le seul problème, c'est de définir un plan suffisamment grand à partir des 3 points de la figure pour obtenir les intersections.

Est-il possible d'obtenir directement un "plan" contenant les trois points en passant par une commande, mais que le plan soit plus grand que le parallélogramme défini par les 3 points ?
chellier
Modérateur honoraire
Modérateur honoraire
Messages : 355
Inscription : samedi 25 juillet 2009, 12:25
Localisation : Le Creusot
Contact :

Re: Section d'un cube par un plan

Message non lu par chellier »

Bonjour,
loicwood a écrit :Est-il possible d'obtenir directement un "plan" contenant les trois points en passant par une commande, mais que le plan soit plus grand que le parallélogramme défini par les 3 points ?
Comme ça peut-être :

Code : Tout sélectionner

size(5cm,0);
import three;
settings.render=0;
settings.prc=false;
currentprojection=obliqueX;
currentlight=nolight;

// Définition d'une routine planetendu
path3 planetendu(triple u, triple v, triple O=O, real k1, real k2)
{
  triple A=O-k1*(u+v);
  return A--A+k2*u--A+k2*(u+v)--A+k2*v--cycle;
}

triple v1=(4,0,0), v2=(0,5,0);

path3 pl1=plane(v1,v2);
path3 pl2=planetendu(v1,v2,.3,1.9);

draw(surface(pl2),paleblue);
draw(surface(pl1),gray+opacity(.8),black);


dot("$O$",O,N);
dot("$O-k1*(u+v)$",O-.3*(v1+v2),N);

//draw(O--X,Arrow3);draw(O--Y,Arrow3);draw(O--Z,Arrow3);
//label("X",X);label("Y",Y);label("Z",Z);
Christophe

PS : La figure ne compile pas sur le forum :shock:
loicwood
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 121
Inscription : dimanche 23 octobre 2011, 11:24
Localisation : Souppes sur Loing

Re: Section d'un cube par un plan

Message non lu par loicwood »

Merci bien :o
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message