Mes premiers pas en 3D

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

Re: Mes premiers pas en 3D

Messagepar Eric » 26 Juil 2022 23:01

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).
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

Re: Mes premiers pas en 3D

Messagepar P.Fradin » 27 Juil 2022 09:31

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é 15930 fois

La hauteur est prise par rapport au plan de base.
P.Fradin
Avatar de l’utilisateur
P.Fradin
Administrateur du site
 
Messages: 1887
Inscription: 29 Oct 2008 15:04

Re: Mes premiers pas en 3D

Messagepar Eric » 28 Juil 2022 21:32

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.
Pièces jointes
Vol4_ex2.teg
(1.69 Kio) Téléchargé 181 fois
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

Re: Mes premiers pas en 3D

Messagepar Eric » 31 Juil 2022 11:25

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é ?
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

Re: Mes premiers pas en 3D

Messagepar P.Fradin » 31 Juil 2022 14:03

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é 15886 fois
P.Fradin
Avatar de l’utilisateur
P.Fradin
Administrateur du site
 
Messages: 1887
Inscription: 29 Oct 2008 15:04

Re: Mes premiers pas en 3D

Messagepar Eric » 01 Août 2022 18:29

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).
Pièces jointes
Vol4_ex4.teg
(852 octets) Téléchargé 183 fois
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

Re: Mes premiers pas en 3D

Messagepar P.Fradin » 01 Août 2022 22:25

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é 15876 fois
P.Fradin
Avatar de l’utilisateur
P.Fradin
Administrateur du site
 
Messages: 1887
Inscription: 29 Oct 2008 15:04

Re: Mes premiers pas en 3D

Messagepar Eric » 01 Août 2022 22:46

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...
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

Re: Mes premiers pas en 3D

Messagepar Eric » 02 Août 2022 08:21

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.
Pièces jointes
Vol4_ex3.teg
(947 octets) Téléchargé 180 fois
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

Re: Mes premiers pas en 3D

Messagepar P.Fradin » 02 Août 2022 09:09

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é 15873 fois
P.Fradin
Avatar de l’utilisateur
P.Fradin
Administrateur du site
 
Messages: 1887
Inscription: 29 Oct 2008 15:04

Re: Mes premiers pas en 3D

Messagepar Eric » 04 Août 2022 11:16

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.
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

Re: Mes premiers pas en 3D

Messagepar P.Fradin » 04 Août 2022 13:06

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é 15848 fois
P.Fradin
Avatar de l’utilisateur
P.Fradin
Administrateur du site
 
Messages: 1887
Inscription: 29 Oct 2008 15:04

Re: Mes premiers pas en 3D

Messagepar Eric » 05 Août 2022 00:03

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).
Pièces jointes
Vol4_ex8.teg
(1.63 Kio) Téléchargé 179 fois
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

Re: Mes premiers pas en 3D

Messagepar Eric » 08 Août 2022 10:28

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é.
Pièces jointes
Vol4_ex10.teg
(1 Kio) Téléchargé 170 fois
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

Re: Mes premiers pas en 3D

Messagepar P.Fradin » 08 Août 2022 11:08

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é 15796 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).
P.Fradin
Avatar de l’utilisateur
P.Fradin
Administrateur du site
 
Messages: 1887
Inscription: 29 Oct 2008 15:04

Re: Mes premiers pas en 3D

Messagepar Eric » 08 Août 2022 11:32

Je te remercie !
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

Re: Mes premiers pas en 3D

Messagepar Eric » 13 Août 2022 10:46

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.
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

Re: Mes premiers pas en 3D

Messagepar P.Fradin » 13 Août 2022 10:51

Salut Eric,

Ce qui donne
cubeTronque.png
cubeTronque.png (5.1 Kio) Consulté 15711 fois
P.Fradin
Avatar de l’utilisateur
P.Fradin
Administrateur du site
 
Messages: 1887
Inscription: 29 Oct 2008 15:04

Re: Mes premiers pas en 3D

Messagepar Eric » 13 Août 2022 10:56

Désolé, j'ai posté en deux temps mon message précédent. Du coup, tu n'as pas vu la fin. Mes excuses.
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

Re: Mes premiers pas en 3D

Messagepar P.Fradin » 13 Août 2022 11:34

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é 15710 fois
P.Fradin
Avatar de l’utilisateur
P.Fradin
Administrateur du site
 
Messages: 1887
Inscription: 29 Oct 2008 15:04

Re: Mes premiers pas en 3D

Messagepar Eric » 13 Août 2022 13:12

Je te remercie !
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

Re: Mes premiers pas en 3D

Messagepar Eric » 15 Août 2022 10:49

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 ?
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

Re: Mes premiers pas en 3D

Messagepar P.Fradin » 15 Août 2022 11:39

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é 15648 fois
P.Fradin
Avatar de l’utilisateur
P.Fradin
Administrateur du site
 
Messages: 1887
Inscription: 29 Oct 2008 15:04

Re: Mes premiers pas en 3D

Messagepar Eric » 15 Août 2022 12:01

Je te remercie.
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

Re: Mes premiers pas en 3D

Messagepar Eric » 25 Août 2022 11:15

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é ?
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

PrécédentSuivant

Revenir vers Questions - Réponses

Qui est en ligne ?

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

cron