Découper un cube en petits dés cubiques

N'oubliez pas de consulter les sujets avant de poser votre question, merci.

Découper un cube en petits dés cubiques

Messagepar Fabrice » 21 Jan 2017 13:18

Bonjour Patrick,
je te souhaite une très bonne année 2017. Je souhaite reproduire l'image le plus fidèlement possible. Comme tu peux le voir, ce n'est pas encore tout à fait cela.
Merci.
Fabrice
Image
Code: Tout sélectionner
[
     view(-3,4,-3.5,4.5), Marges(0,0,0,0), size(8),
     a:=4, Cube:=Parallelep(Origin,vecI,vecJ,vecK,0),
     Color:=white,
     DrawFacet(
       for z from 0 to a-2 do
             for x from 0 to a-2 do
                 for y from 0 to a-2 do
                   C:=M(x,y,z),shift3d(Cube,C)
                 od
             od
       od, [color:=red, FillOpacity:=0.5]),
    ]   
Fabrice
 
Messages: 139
Inscription: 14 Août 2009 12:22

Re: Découper un cube en petits dés cubiques

Messagepar P.Fradin » 21 Jan 2017 18:37

Bonjour Fabrice,

Et bonne année 2017 à toi aussi.
Pour ton dessin, j'ai pensé plutôt à dessiner un seul grand cube, puis des arêtes par dessus.
Pour éviter de chercher à la main lesquelles sont cachées, j'ai utilisé la macro Intersection(plan, polyedre) qui renvoie l'intersection d'un polyèdre avec un plan sous forme d'arêtes avec l'information visible/cachée et la macro DrawAretes() les dessine ensuite:
Code: Tout sélectionner
[
         view(-4,5,-4.5,5.5), Marges(0,0,0,0), size(8),
         ModelView(central),
         a:=4,
         Cube:=Parallelep(Origin,a*vecI,a*vecJ,a*vecK),
         HideColor:=gray, HideStyle:=userdash, HideWidth:=4,
         DrawFacet(Cube,[color:=HexaColor("D96251"), backculling:=1]),
         Color:=HexaColor("BB264E"), Width:=8,
         DrawPoly(Cube,0), //pour les arêtes cachées
         //tracé des lignes
         for k from 1 to a-1 do // suivant Oy
           L:=Intersection( [M(0,k,0),vecJ], Cube),
           DrawAretes(L)
         od,
         for k from 1 to a-1 do // suivant Ox
           L:=Intersection( [M(k,0,0),vecI], Cube),
           DrawAretes(L)
         od,
         for k from 1 to a-1 do  // suivant Oz
           L:=Intersection( [M(0,0,k),vecK], Cube),
           DrawAretes(L)
         od
        ]

CubesFab.png
CubesFab.png (23.22 Kio) Consulté 7353 fois


Maintenant, ce que l'on peut reprocher, c'est que l'on ne voit pas les arêtes cachées des petits cubes "intérieurs", mais sur l'original non plus ...
On peut peaufiner en dessinant pour le dessus non pas une face, mais tous les petits carrés avec un shading comme sur l'image original...
P.Fradin
Avatar de l’utilisateur
P.Fradin
Administrateur du site
 
Messages: 1887
Inscription: 29 Oct 2008 15:04

Re: Découper un cube en petits dés cubiques

Messagepar P.Fradin » 21 Jan 2017 18:51

Autre version (mais il ne faut pas faire tourner le cube, et il faut charger le modèle draw2d.mod)
Code: Tout sélectionner
[        FrenchBabel:=1,
         view(-4,5,-4.5,5.5), Marges(0,0,0,0), size(8),
         ModelView(central),
         a:=4,
         Cube:=Parallelep(Origin,a*vecI,a*vecJ,a*vecK),
         HideColor:=gray, HideStyle:=userdash, HideWidth:=4,
         //DrawFacet(Cube,[color:=HexaColor("D96251"), backculling:=1]),
         for x from 0 to a-1 do //face supérieure
             for y from 0 to a-1 do
              draw("line", Proj3D([M(x,y,a),M(x+1,y,a),M(x+1,y+1,a),M(x,y+1,a)]),
              [FillStyle:=gradient, FillColorB:=crimson])
             od
         od,
         for y from 0 to a-1 do //face avant
             for z from 0 to a-1 do
              draw("line", Proj3D([M(a,y,z),M(a,y+1,z),M(a,y+1,z+1),M(a,y,z+1)]),
              [FillStyle:=gradient, FillColorB:=crimson])
             od
         od,
         for x from 0 to a-1 do //face droite
             for z from 0 to a-1 do
              draw("line", Proj3D([M(x,a,z),M(x+1,a,z),M(x+1,a,z+1),M(x,a,z+1)]),
              [FillStyle:=gradient, FillColorB:=crimson])
             od
         od,
         Color:=red, Width:=8,
         DrawPoly(Cube,0), //pour les arêtes cachées
         //tracé des lignes
         for k from 1 to a-1 do // suivant Oy
           L:=Intersection( [M(0,k,0),vecJ], Cube),
           DrawAretes(L)
         od,
         for k from 1 to a-1 do // suivant Ox
           L:=Intersection( [M(k,0,0),vecI], Cube),
           DrawAretes(L)
         od,
         for k from 1 to a-1 do  // suivant Oz
           L:=Intersection( [M(0,0,k),vecK], Cube),
           DrawAretes(L)
         od
        ]

CubesFab2.png
CubesFab2.png (40.51 Kio) Consulté 7353 fois
P.Fradin
Avatar de l’utilisateur
P.Fradin
Administrateur du site
 
Messages: 1887
Inscription: 29 Oct 2008 15:04

Re: Découper un cube en petits dés cubiques

Messagepar Fabrice » 22 Jan 2017 11:08

Bonjour Patrick,
Merci, le deuxième code me convient parfaitement. Une petite question : je compile le fichier en pdf compilé pour l'inclure dans un fichier au format tex mais je trouve qu'il y a trop d'espace "blanc" autour de la figure elle-même. Je dois modifier view(-4,5,-4.5,5.5) ou modifier certains paramètres ?
Fabrice
Fabrice
 
Messages: 139
Inscription: 14 Août 2009 12:22

Re: Découper un cube en petits dés cubiques

Messagepar P.Fradin » 22 Jan 2017 11:22

Salut Fabrice,

Comme les marges sont déjà à 0, il faut modifier les valeurs dans view(-4,5,-4.5,5.5) pour réduire les deux intervalles sur x et sur y.
P.Fradin
Avatar de l’utilisateur
P.Fradin
Administrateur du site
 
Messages: 1887
Inscription: 29 Oct 2008 15:04


Revenir vers Questions - Réponses

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 2 invités

cron