Page 3 sur 4

Re: Mes premiers pas en 3D

MessagePublié: 26 Juil 2022 23:01
par Eric
En fait, la base n'est pas le bord stocké dans la variable B, mais l'intersection du plan avec la surface conique (ça doit être la variable C2).

Re: Mes premiers pas en 3D

MessagePublié: 27 Juil 2022 09:31
par P.Fradin
Cela me paraît bizarre, ton plan de "base" ne serait donc pas parallèle au plan de la courbe qui sert à construire le cône (plan $z=2$) ?
Code: Tout sélectionner
[//command
  view(-10.25,6.5,-7.25,5),
  Marges(0,0,0,0), size(8), viewDir(30,60),
  V:= [4-2*i,-5],
  NewMac("f", "[4*cos(t)-cos(4*t)+i*(4*sin(t)-sin(4*t)),2]", t),
  C:=curve2Cone(f(t),0,2*pi,V,1,B),
  P2:=[M(0,0,3)+V/2,vecJ+6*vecK],
  Delta := [M(2,-5,-4), V],
  cone2 := ClipFacet(C,P2,cone1),
  // B récupère la liste des points 3d des bords haut et bas du cylindre
  C2:= Intersection(P2,C,L),
  I := interDP([Delta,V],P2),
  H1 := L[63,2], H2 := V+H1- proj3d(V,P2),
  FillStyle:=full, FillOpacity:=0.5, Width:=2,
  DrawFacet(cone1, [color:=white]),
  draw("line", Proj3D([H1,H2]), [Width:=6, Arrows:=2, legend:="$h$", labeldir:="E", labelsep:=0.1]),
  draw("line", Proj3D([H2,V]), [Width:=6, LineStyle:=userdash]),
  angleD(Proj3D(H2), Proj3D(H1), Proj3D(2*H1- proj3d(V,P2))),
  DrawPlan(P2,vecI,12,12),
  draw("line", Proj3D(L), [close:=1, FillStyle:=fdiag, FillColor:=black, Width:=8]),
  DrawFacet(cone2, [color:=white, FillStyle:=full, FillOpacity:=0.5, Width:=2]),
  FillStyle := none,
  A:=(B[101,2]+B[103,2])/2, // 2ième point 3d du bord (le kième point est B[2k-1,2])
  LabelSize:=footnotesize,
  LabelDot(Proj3D(A),"$\mathscr{C}$","N",0,0.15),
  LabelDot(Proj3D(V),"$S$","O",0,0.15),
]

Vol4_ex2Bis.png
Vol4_ex2Bis.png (30.61 Kio) Consulté 17515 fois

La hauteur est prise par rapport au plan de base.

Re: Mes premiers pas en 3D

MessagePublié: 28 Juil 2022 21:32
par Eric
Je te remercie.

Le bord B est une directrice de la surface conique. Le cône est obtenu par une section de cette surface par un plan, pas nécessairement parallèle au plan dans lequel se trouve la directrice choisie initialement (d'ailleurs l’intersection avec le plan donne une nouvelle directrice).

J'ai modifié la visualisation de la hauteur du cône.

Re: Mes premiers pas en 3D

MessagePublié: 31 Juil 2022 11:25
par Eric
Bonjour Patrick

Ce matin, j'ai tenté un octaèdre régulier. J'essaie avec la commande pqGoneReg3D (je suppose que le couple p-q est le symbole de Schläfli). J'utilise le code suivant :

Marges(0,0,0,0),size(7.5),
S:=pqGoneReg3D([Origin,2*vecK],Origin,[3,4]),
DrawFlatFacet(S,[color:=gray,backculling:=1]),

et je n'obtiens rien. Qu'est ce que j'ai raté ?

Re: Mes premiers pas en 3D

MessagePublié: 31 Juil 2022 14:03
par P.Fradin
Bonjour Eric,

Pour mettre du code on utilise la balise code.

Si tu veux dessiner des polyèdres, c'est le modèle PoyledresII qu'il te faut.
C'est Alphonse qui avait écrit les macros relatives aux pqGoneReg, il est mieux placé que moi pour répondre. Mais ces macros donnent des points coplanaires. D'autre part le sommet fourni ne doit pas être sur l'axe. Exemple dans le plan $z=0$ :
Code: Tout sélectionner
[//command
Marges(0,0,0,0),size(7.5), viewDir(30,60),
S := pqGoneReg3D([Origin,vecK],M(4,0,0),[7,3]),
DrawFlatFacet(S,[color:=gray,backculling:=1]),
]

pqGoneReg3D.png
pqGoneReg3D.png (5.13 Kio) Consulté 17471 fois

Re: Mes premiers pas en 3D

MessagePublié: 01 Août 2022 18:29
par Eric
J'ai installé le module polyèdres et j'ai un peu ramé avec la doc.

Je suis finalement arrivé à produire quelque chose de presque satisfaisant. Je n'arrive juste pas à nommer deux des sommets (je ne trouve pas les indices corrects de la variable P).

Re: Mes premiers pas en 3D

MessagePublié: 01 Août 2022 22:25
par P.Fradin
Code: Tout sélectionner
[
   view(-4,4,-4,4), Marges(0,0,0,0), size(8),
    FillStyle:=full,FillColor:=white,
    //theta:=10,phi:=20, // attention ce sont des radians !
    viewDir(-148,84), // là ce sont des degrés
    P:=Octaedre(Origin,2.5), // P est une liste de facettes
    DrawPoly(P,4,0.5),
    S := Sommets(P), // récuperation des sommets
  LabelSize:=footnotesize,
  LabelDot(Proj3D(S[1,2]),"$B$","E",1,0.15),
  LabelDot(Proj3D(S[3,2]),"$C$","E",1,0.15),
  LabelDot(Proj3D(S[11,2]),"$D$","O",1,0.15),
  LabelDot(Proj3D(S[7,2]),"$E$","O",1,0.15),
  LabelDot(Proj3D(S[9,2]),"$A$","N",1,0.15),
  LabelDot(Proj3D(S[5,2]),"$F$","S",1,0.15),
]

Vol4_ex4.png
Vol4_ex4.png (8.33 Kio) Consulté 17461 fois

Re: Mes premiers pas en 3D

MessagePublié: 01 Août 2022 22:46
par Eric
J'avais trouvé une grosse astuce, mais ta façon de régler proprement le problème est bien mieux !
Encore merci ! Je reviens demain avec une troncature de cube...

Re: Mes premiers pas en 3D

MessagePublié: 02 Août 2022 08:21
par Eric
Bonjour Patrick

Je continue encore un peu avec les cônes. Sur le fichier attaché, je voudrais faire apparaitre le cercle de base avec la partie cachée en pointillé. Je ne peux pas utiliser la commande Cone, puisque le cône n'est pas de révolution.

Re: Mes premiers pas en 3D

MessagePublié: 02 Août 2022 09:09
par P.Fradin
Bonjour Eric,

Voici une proposition :
Code: Tout sélectionner
[//command
 view(-2.25,3.5,-1.6,2.35),
 Marges(0,0,0,0), size(6), NbPoints:=40,
 LabelSize:=footnotesize,
 S:=[1+4*i,4], S1:=[1+4*i,0],
 C :=curve2Cone(2*[cos(t)+i*sin(t),0],-pi,pi,S,0),
 draw("line", Proj3D([S1,Origin]),[LineStyle:=userdash,Width:=4]), //sous le cône
 Width:=8, HideStyle:=userdash, DrawAretes(Bord(C)), //bord du cône
 FillOpacity:=0.8, Width:=6,
 DrawSmoothFacet(C,[color :=white,backculling :=1]), //le cône
 Width:=4,
 draw("line", Proj3D([S1,S]),
   [LineStyle:=userdash,Arrows:=2,
   legend:="$h$",labeldir:="E",labelsep:=0.1]),
 angleD(Proj3D(S),Proj3D(S1),Proj3D(Origin)),
 LabelDot(Proj3D(S),"$S$","NO",0,0.1),
 LabelDot(Proj3D(S1),"$H$","E",0,0.1),
]

Vol4_ex3.png
Vol4_ex3.png (9.45 Kio) Consulté 17458 fois

Re: Mes premiers pas en 3D

MessagePublié: 04 Août 2022 11:16
par Eric
Bonjour Patrick

En reprenant l'exemple précédent, j'ai essayé de sectionner le cône par un plan parallèle à la base pour obtenir un tronc de cône (en m'inspirant d'une de tes constructions précédentes). J'ai juste obtenu un message de Texgraph me disant qu'il refusait de faire quelque chose qui allait tout casser...

Pratiquement, je veux faire un tronc de cône où la partie du cône entre la seconde base et le sommet est en pointillé.

Merci d'avance.

Re: Mes premiers pas en 3D

MessagePublié: 04 Août 2022 13:06
par P.Fradin
Bonjour Eric,

Code: Tout sélectionner
[//command
 view(-2.25,3.5,-1.6,2.35),
 Marges(0,0,0,0), size(6), NbPoints:=40,
 LabelSize:=footnotesize,
 S:=[1+4*i,4], S1:=[1+4*i,0],
 D :=curve2Cone(2*[cos(t)+i*sin(t),0],-pi,pi,S,0),
 P := [M(0,0,2), -vecK], // plan de coupe z=2
 C := ClipFacet(D,P), // partie basse
 C':= ClipFacet(D,[M(0,0,2),vecK]), // partie haute
 draw("line", Proj3D([S1,Origin]),[LineStyle:=userdash,Width:=4]), //sous le cône
 Width:=8,  B := CpCopy(Proj3D(Merge3d(Bord(C))),1,1),
 draw("line", B, [Width:=12]), // bord inférieur
 FillOpacity:=0.8, Width:=6,
 DrawSmoothFacet(C,[color :=white,backculling :=0]), //le tronc de cône
 B := CpCopy(Merge3d(Bord(C)),2,1),
 draw("line", Proj3D(B), [Width:=8]), //bord supérieur
 Width:=2, LineStyle:=dotted,
 Ligne3D(for z in B by 4 do z[1,2], S od,0), // un point sur 2 du bord supérieur est relié à S
 draw("line", Proj3D([S1,S]),
   [LineStyle:=userdash,Arrows:=2,
   legend:="$h$",labeldir:="E",labelsep:=0.1]),
 angleD(Proj3D(S),Proj3D(S1),Proj3D(Origin)),
 LabelDot(Proj3D(S),"$S$","NO",0,0.1),
 LabelDot(Proj3D(S1),"$H$","E",0,0.1),
]

Vol4_ex3-2.png
Vol4_ex3-2.png (10.25 Kio) Consulté 17433 fois

Re: Mes premiers pas en 3D

MessagePublié: 05 Août 2022 00:03
par Eric
Je te remercie.

J'ai fait des modifications mineures (principalement, j'ai adapté la flèche pour la hauteur à celle du tronc de cône).

Re: Mes premiers pas en 3D

MessagePublié: 08 Août 2022 10:28
par Eric
Bonjour Patrick

J'ai dessiné un cône de révolution avec la base "en avant". J'ai trouvé bizarre dans ce cas de devoir préciser HideStyle:=normal pour que le bord ne soit pas à moitié en pointillé.

Re: Mes premiers pas en 3D

MessagePublié: 08 Août 2022 11:08
par P.Fradin
Bonjour Eric,

C'est normal, le bord est une succession d'arêtes et chaque arête a le statut de la facette dont elle fait partie (facette cachée => arête cachée). Imagine que tu prolonges ton cône a l'infini et que tu regardes l'intersection avec le plan correspondant à ta base :
Vol4_ex10.png
Vol4_ex10.png (7.21 Kio) Consulté 17381 fois

les pointillés sont bien justifiés. Si on ne veut pas ce comportement, il faut dessiner le bord non plus en tant que suite d'arêtes, mais en tant que ligne polygonale : Ligne3D(Merge3d(Bord(C)),1).

Une remarque : c'est HideStyle := solid (et non pas normal).

Re: Mes premiers pas en 3D

MessagePublié: 08 Août 2022 11:32
par Eric
Je te remercie !

Re: Mes premiers pas en 3D

MessagePublié: 13 Août 2022 10:46
par Eric
Bonjour Patrick

En m'inspirant de la doc et des exemples précédents, j'ai fait le code suivant.
Code: Tout sélectionner
[//command
 view(-0.8,1.8,-1.4,1.7), Marges(0,0,0,0), size(5.5),
 cube:=Parallelep(Origin,2*vecI,2*vecJ,2*vecK),
 plan:=[M(0,1,2),-vecI+vecJ-vecK],
 S:=Section(plan,cube), FillStyle:=full,
 FillColor:=white,HideWidth:=6,HideStyle:=dashed,
 DrawPoly(S,2),

 T:=Sommets(S),
 LabelDot(Proj3D(T[7,2]),"$D$","S",0,0.15),
 LabelDot(Proj3D(T[9,2]),"$E$","O",0,0.15),
 LabelDot(Proj3D(T[11,2]),"$B$","SE",0,0.1),
 LabelDot(Proj3D(T[15,2]),"$A$","N",0,0.1),
 LabelDot(Proj3D(T[17,2]),"$F$","O",0,0.15),
 LabelDot(Proj3D(T[19,2]),"$C$","E",0,0.15),
]                                               


J'aurai voulu ajouter en pointillé la partie du cube sectionnée.

Re: Mes premiers pas en 3D

MessagePublié: 13 Août 2022 10:51
par P.Fradin
Salut Eric,

Ce qui donne
cubeTronque.png
cubeTronque.png (5.1 Kio) Consulté 17296 fois

Re: Mes premiers pas en 3D

MessagePublié: 13 Août 2022 10:56
par Eric
Désolé, j'ai posté en deux temps mon message précédent. Du coup, tu n'as pas vu la fin. Mes excuses.

Re: Mes premiers pas en 3D

MessagePublié: 13 Août 2022 11:34
par P.Fradin
Code: Tout sélectionner
[//command
 view(-1.1,1.8,-1.4,1.8), Marges(0,0,0,0), size(5.5),
 cube:=Parallelep(Origin,2*vecI,2*vecJ,2*vecK),
 V := M(-1,1,-1),
 plan:=[M(0,1,2),V],
 S:=Section(plan,cube), S':=Section([M(0,1,2),-V],cube),
 FillStyle:=full,
 FillColor:=white,HideWidth:=6,HideStyle:=dashed,
 DrawPoly(S,2),

 T:=Sommets(S),
 LabelDot(Proj3D(T[7,2]),"$D$","S",0,0.15),
 LabelDot(Proj3D(T[9,2]),"$E$","O",0,0.15),
 LabelDot(Proj3D(T[11,2]),"$B$","SE",0,0.1),
 LabelDot(Proj3D(T[15,2]),"$A$","N",0,0.1),
 LabelDot(Proj3D(T[17,2]),"$F$","O",0,0.15),
 LabelDot(Proj3D(T[19,2]),"$C$","E",0,0.15),
 LineStyle:=dotted, FillStyle:=none,
 Ligne3D(Merge3d(Aretes(S')),0)
]

cubeTronque2.png
cubeTronque2.png (6.29 Kio) Consulté 17295 fois

Re: Mes premiers pas en 3D

MessagePublié: 13 Août 2022 13:12
par Eric
Je te remercie !

Re: Mes premiers pas en 3D

MessagePublié: 15 Août 2022 10:49
par Eric
Bonjour Patrick

Je reviens à la section d'un cône par un plan.Dans le code suivant, j'ai fait plus simple que dans les exemples précédents.
Code: Tout sélectionner
[//command
 view(-2.35,3.6,-1.55,2.55),
 Marges(0,0,0,0), size(5.6), NbPoints:=40,
 LabelSize:=footnotesize,
 S:=[1+4*i,4.5], S1:=[1+4*i,0],
 S2:=interDP([Origin,S],[[0,1.5],vecK]),S3:=[1+4*i,1.5],

 C:=curve2Cone(2.25*[cos(t)+i*sin(t),0],-pi,pi,S,0),
 C':= ClipFacet(C,[M(0,0,1.5),vecK]), // partie haute

 draw("line", Proj3D([S1,Origin]),[LineStyle:=userdash,Width:=6]), //sous le cône
 draw("line", Proj3D([S2,S3]),[LineStyle:=userdash,Width:=6]), //sous le cône
 draw("line", Proj3D([S,Origin]),[LineStyle:=dashed,Width:=6]), //sous le cône

 Width:=8, HideStyle:=userdash, DrawAretes(Bord(C)), //bord de section
 DrawAretes(Bord(C')),

 FillOpacity:=0.8, Width:=6,
 DrawSmoothFacet(C,[color :=white,backculling :=1]), //le cône
 Width:=6,
 draw("line", Proj3D([S1,S]),[LineStyle:=userdash]),
 angleD(Proj3D(S),Proj3D(S1),Proj3D(Origin),0.2),
 angleD(Proj3D(S),Proj3D(S3),Proj3D(S2),0.2),

 LabelDot(Proj3D(S),"$S$","E",0,0.15),
 LabelDot(Proj3D(S1),"$H$","E",0,0.1),
 LabelDot(Proj3D(S3),"$H'$","E",0,0.1),
 LabelDot(Proj3D(Origin),"$O$","O",0,0.15),
 LabelDot(Proj3D(S2),"$O'$","O",0,0.15),
]


Je voudrais que le bord de la section soit en noir, au lieu d'être grisé. Faut-il sortir l'artillerie comme tu as fait précédemment ?

Re: Mes premiers pas en 3D

MessagePublié: 15 Août 2022 11:39
par P.Fradin
Bonjour Eric,

Il faut jouer sur l'ordre d'affichage :
Code: Tout sélectionner
[//command
 view(-2.35,3.6,-1.55,2.55),
 Marges(0,0,0,0), size(5.6), NbPoints:=40,
 LabelSize:=footnotesize,
 S:=[1+4*i,4.5], S1:=[1+4*i,0],
 S2:=interDP([Origin,S],[[0,1.5],vecK]),S3:=[1+4*i,1.5],

 C:=curve2Cone(2.25*[cos(t)+i*sin(t),0],-pi,pi,S,0),
 C':= ClipFacet(C,[M(0,0,1.5),vecK]), // partie haute

 draw("line", Proj3D([S1,Origin]),[LineStyle:=userdash,Width:=6]), //sous le cône
 draw("line", Proj3D([S2,S3]),[LineStyle:=userdash,Width:=6]), //sous le cône
 draw("line", Proj3D([S,Origin]),[LineStyle:=dashed,Width:=6]), //sous le cône

 FillOpacity:=0.6, Width:=6,
 DrawSmoothFacet(C,[color :=white,backculling :=1]), //le cône
 FillOpacity := 1,

 Width:=8, HideStyle:=userdash, DrawAretes(Bord(C)), //bord de section
 DrawAretes(Bord(C')),

 Width:=6,
 draw("line", Proj3D([S1,S]),[LineStyle:=userdash]),
 angleD(Proj3D(S),Proj3D(S1),Proj3D(Origin),0.2),
 angleD(Proj3D(S),Proj3D(S3),Proj3D(S2),0.2),

 LabelDot(Proj3D(S),"$S$","E",0,0.15),
 LabelDot(Proj3D(S1),"$H$","E",0,0.1),
 LabelDot(Proj3D(S3),"$H'$","E",0,0.1),
 LabelDot(Proj3D(Origin),"$O$","O",0,0.15),
 LabelDot(Proj3D(S2),"$O'$","O",0,0.15),
]

sectionCone.png
sectionCone.png (12.84 Kio) Consulté 17233 fois

Re: Mes premiers pas en 3D

MessagePublié: 15 Août 2022 12:01
par Eric
Je te remercie.

Re: Mes premiers pas en 3D

MessagePublié: 25 Août 2022 11:15
par Eric
Bonjour Patrick

Je passe à la sphère. En m'inspirant d'une de tes figures précédentes, j'ai fait le code suivant.

Code: Tout sélectionner
[//command
  view(-8.9,5.6,-4.7,4.6),
  Marges(0,0,0,0), size(7.5), viewDir(30,60),
  V:= [4-1.5*i,-4.5],

  C:=Sphere(1-i,3,30,30),
  P2:=[M(0,0,3)+V/2,vecJ+6*vecK],
  Delta := [M(2,-5,-4), V],
  sphere2 := ClipFacet(C,P2,sphere1),

  C2:= Intersection(P2,C,L),
  I := interDP([Delta,V],P2),

  FillStyle:=full, FillOpacity:=0.5, Width:=2,
  DrawSmoothFacet(sphere1, [color:=white,backculling :=0]),

  DrawPlan(P2,vecI,12,9.5),
  draw("line", Proj3D(L),
   [close:=1, FillColor:=white,Width:=10]),
  DrawSmoothFacet(sphere2,
   [color:=white, FillStyle:=none, Width:=2,backculling :=0]),
]                                     


Comment faire pour que la partie cachée du cercle intersection du plan et de la sphère soit en pointillé ?