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 » 30 Juin 2022 11:31

P.Fradin a écrit:
Je pense qu'il vaudrait mieux prendre V = [0,7] pour que le cylindre soit droit !


La perspective, ça trompe énormément !
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

Re: Mes premiers pas en 3D

Messagepar Eric » 02 Juil 2022 10:52

Bonjour Patrick

J'essaie maintenant de dessiner un prisme, sans les plans de coupe, ni le cylindre initial. J'ai produit le fichier attaché.
Comment changer le style des traits représentant les arêtes cachées (en trait pointillé par exemple) ? Comment visualiser la hauteur du prisme (par une flèche extérieure au prisme) ?

Merci d'avance.
Pièces jointes
Vol5_ex6.teg
(660 octets) Téléchargé 225 fois
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

Re: Mes premiers pas en 3D

Messagepar P.Fradin » 02 Juil 2022 11:30

Bonjour Eric,

Il y a un souci avec ton utilisation de la commande Prisme car tu lui fournis une liste de points du plan (calculée par polyreg) alors qu'il lui faut une liste de points de l'espace, donc il faut parcourir la liste de point du plan et pour chacun d'eux ajouter une cote z=0 par exemple) :
Code: Tout sélectionner
[//command
  view(-4,6,-2,8), Marges(0,0,0,0), size(8),
  viewDir(10,70), //angles de vues theta et phi
  V := [1+2*i,7],
  // Prisme(listes de points 3D, vecteur 3D)
  Cyl1:=Prisme(for z in polyreg(0,3,12) do [z,0] od,V),
  Width:=6, HideStyle:=userdash, HideWidth:=6, FillStyle:=full,
  DrawPoly(Cyl1,4,0.5), // mode 4 et contraste 0.5
]

Vol5_ex6.png
Vol5_ex6.png (13.2 Kio) Consulté 17349 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 P.Fradin » 03 Juil 2022 11:48

'ai oublié la hauteur :
Code: Tout sélectionner
[//command
  view(-4,6,-2,8), Marges(0,0,0,0), size(8),
  viewDir(10,70), //angles de vues theta et phi
  V := [1+2*i,7], A := 3.45*vecJ+V, B := pxy(A),
  // Prisme(listes de points 3D, vecteur 3D)
  Cyl1:=Prisme(for z in polyreg(0,3,12) do [z,0] od,V),
  Width:=6, HideStyle:=userdash, HideWidth:=6, FillStyle:=full,
  DrawPoly(Cyl1,4,0.5), // mode 4 et contraste 0.5
  draw("line", Proj3D([A,B]),
   [legend:="$h$",labeldir:="O", marker:=[0,CDdistance',1,CDdistance']])
]

Vol5_ex6-2.png
Vol5_ex6-2.png (13.58 Kio) Consulté 17345 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 » 03 Juil 2022 13:30

Je te remercie.
J'ai essayé de jouer avec l'angle de vue de la figure précédente (sans la hauteur) pour donner au prisme un "air couché", mais je ne suis arrivé à rien de bien concluant. Je suppose qu'il faut jouer avec le polygone de base pour qu'il ne se trouve plus dans le plan (x,y), mais (y,z).
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

Re: Mes premiers pas en 3D

Messagepar P.Fradin » 03 Juil 2022 15:27

Je ne sais pas trop ce que tu appelles couché...
Si tu ne veux pas qu'il est l'air trop droit, il faut jouer sur le vecteur V :
Code: Tout sélectionner
[//command
  view(-4,10,-2,8), Marges(0,0,0,0), size(8),
  viewDir(15,80), //angles de vues theta et phi
  V := [1+6*i,7], A := 3.45*vecJ+V, B := pxy(A),
  // Prisme(listes de points 3D, vecteur 3D)
  Cyl1:=Prisme(for z in polyreg(0,3,12) do [z,0] od,V),
  Width:=6, HideStyle:=userdash, HideWidth:=6, FillStyle:=full,
  DrawPoly(Cyl1,4,0.5), // mode 4 et contraste 0.5
  draw("line", Proj3D([A,B]),
   [legend:="$h$",labeldir:="O", marker:=[0,CDdistance',1,CDdistance']])
]

Vol5_ex6-3.png
Vol5_ex6-3.png (12.52 Kio) Consulté 17345 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 » 03 Juil 2022 20:58

Je souhaiterais que les bases soient verticales.
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

Re: Mes premiers pas en 3D

Messagepar P.Fradin » 04 Juil 2022 09:32

Quelque chose comme ça ?
Code: Tout sélectionner
[//command
  view(-6,6,-7,5), Marges(0,0,0,0), size(8),
  viewDir(10,70), //angles de vues theta et phi
  V := [8*i,-3],
  A := 2.45*vecK-V/2, B := proj3d(A,[A+V,vecJ]),
  // Prisme(listes de points 3D, vecteur 3D)
  Cyl1:=Prisme(for z in polyreg(0,3,12) do [Im(z)-4*i,Re(z)] od,V),
  Width:=6,
  draw("line", Proj3D([A,[-4*i,0]]) ),
  HideStyle:=userdash, HideWidth:=6, FillStyle:=full,

  DrawPoly(Cyl1,4,0.5), // mode 4 et contraste 0.5
  draw("line", Proj3D([A,B]),
   [legend:="$h$",labelpos:=0.5,labeldir:="S",Arrows:=2]),
  draw("line", Proj3D([B,[-4*i,0]+V]) ),
  draw("line", Proj3D([A,[-4*i,0]]), [LineStyle:=userdash] ),
]

Vol5_ex6-4.png
Vol5_ex6-4.png (15.23 Kio) Consulté 17337 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 Juil 2022 09:50

Quelque chose comme ça :-) Je vais prendre les deux !
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

Re: Mes premiers pas en 3D

Messagepar Eric » 04 Juil 2022 10:10

Dans le deuxième exemple (les bases "verticales"), je voudrais un polygone non régulier et que le prisme soit droit. J'ai bien vu qu'il faut remplacer la commande polyreg par la liste de sommets du polygone de base. Mais pour que le prisme soit droit, je ne vois pas.
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

Re: Mes premiers pas en 3D

Messagepar P.Fradin » 04 Juil 2022 11:04

Pour que le prisme soit doit il faut que le vecteur V soit orthogonal au plan de base :
Code: Tout sélectionner
[//command
  view(-6,6,-5,5.5), Marges(0,0,0,0), size(8),
  viewDir(30,70), //angles de vues theta et phi
  V := 8*vecJ, // vecteur orthogonal au plan xOz
  // base = liste de points du plan xOy dans le sens direct
  base := 0.75*[2+2.4*i, -2.9+3.6*i, -4.3+0.3*i, -2-i, 0.2-3.4*i, 3.1-1.2*i],
  // base 3d : on transforme base en liste de points du plan y=-4
  base3d := for z in base do [Im(z)-4*i,Re(z)] od,
  A := base3d[11,2]+1.5*vecK, B := proj3d(A,[A+V,vecJ]),
  // Prisme(listes de points 3D, vecteur 3D)
  Cyl1:=Prisme(base3d,V),
  Width:=6,
  HideStyle:=userdash, HideWidth:=6, FillStyle:=full,
  DrawPoly(Cyl1,4,0.5), // mode 4 et contraste 0.5
  draw("line", Proj3D([A,B]),
   [legend:="$h$",labelpos:=0.5,labeldir:="N",Arrows:=2]),
  draw("line", Proj3D([B,base3d[11,2]+V]) ),
  draw("line", Proj3D([A,base3d[11,2]]) )
]

Vol5_ex6-5.png
Vol5_ex6-5.png (7.97 Kio) Consulté 17337 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 Juil 2022 12:18

Superbe !
Comment ajouter une marque d'angle droit sur une des faces latérales ?
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

Re: Mes premiers pas en 3D

Messagepar P.Fradin » 04 Juil 2022 13:23

Code: Tout sélectionner
[//command
  view(-6,6,-5,5.5), Marges(0,0,0,0), size(8),
  viewDir(35,60), //angles de vues theta et phi
  V := 8*vecJ,
  // base = liste de points du plan xOy dans le sens direct
  base := 0.75*[2+2.4*i, -2.9+3.6*i, -4.3+0.3*i, -2-i, 0.2-3.4*i, 3.1-1.2*i],
  // base 3d : on transforme base en liste de points du plan y=-4
  base3d := for z in base do [Im(z)-4*i,Re(z)] od,
  A := base3d[11,2]+1.5*vecK, B := proj3d(A,[A+V,vecJ]),
  // Prisme(listes de points 3D, vecteur 3D)
  Cyl1:=Prisme(base3d,V),
  Width:=6,
  FillStyle:=none, A' := base3d[11,2],
  a:= Proj3D(A'), b:=Proj3D(A'-0.25*vecJ),c:= Proj3D(A'-1.5*vecK),
  angleD(b,a,c,0.5),
  HideStyle:=userdash, HideWidth:=6, FillStyle:=full,
  DrawPoly(Cyl1,4,0.5), // mode 4 et contraste 0.5
  draw("line", Proj3D([A,B]),
   [legend:="$h$",labelpos:=0.5,labeldir:="N",Arrows:=2]),
  draw("line", Proj3D([B,base3d[11,2]+V]) ),
  draw("line", Proj3D([A,base3d[11,2]])),
  FillStyle:=none,
  A' := base3d[11,2]+V,
  a:= Proj3D(A'), b:=Proj3D(A'+0.25*vecJ),c:= Proj3D(A'-1.5*vecK),
  angleD(b,a,c,0.5),
  LineStyle:=dotted, Droite(Proj3D( [A'-0.25*vecJ,A'+0.25*vecJ]) ),
  A' := base3d[11,2],
  a:= Proj3D(A'), b:=Proj3D(A'-0.25*vecJ),c:= Proj3D(A'-1.5*vecK),
  angleD(b,a,c,0.5),
]

Vol5_ex6-6.png
Vol5_ex6-6.png (9.69 Kio) Consulté 17321 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 Juil 2022 16:41

Je te remercie. Je l'ai un peu modifié pour placer les angles droits sur des faces latérales.
Pièces jointes
Vol5_ex7.teg
(1.76 Kio) Téléchargé 222 fois
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

Re: Mes premiers pas en 3D

Messagepar Eric » 10 Juil 2022 14:05

Bonjour Patrick

Je suis passé aux cylindres de révolution. J'ai fait la figure en fichier attaché. Comment faire apparaitre en pointillé la partie cachée de la base à gauche ?
Pièces jointes
Vol5_ex9.teg
(869 octets) Téléchargé 216 fois
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

Re: Mes premiers pas en 3D

Messagepar P.Fradin » 10 Juil 2022 18:51

Bonjour Eric,

On redessine le cylindre en fil de fer, par dessus l'autre :
Code: Tout sélectionner
[//command
 Marges(0,0,0,0),
 theta :=80*deg, phi :=70*deg,
 V:=5*(-vecI+vecJ),
 S:=Cylindre(M(0,0,-4),V,2,50,0),
 DrawSmoothFacet(S,[color:=white,backculling:=0]),
 HideStyle := userdash,
 Dcylindre(M(0,0,-4),V,2,4),

 A:=S[51,2],Width:=4,LabelSize:=footnotesize,
 draw("line", Proj3D([A,A+V]),
   [legend:="$h$",labelpos:=0.5,labeldir:=[0.2,i]]),
 draw("line", Proj3D([M(0,0,-4)+V,A+V]),
   [legend:="$r$",labelpos:=0.5,labeldir:=[0.2,i]]),
 FillStyle:=none,
 angleD(Proj3D(A+V),Proj3D(A),Proj3D(S[53,2]),0.25),
 LineStyle:=HideStyle,
 angleD(Proj3D(M(0,0,-4)+V),Proj3D(A+V),Proj3D(A),0.25),
]

Vol5_ex9.png
Vol5_ex9.png (7.96 Kio) Consulté 17188 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 » 10 Juil 2022 20:49

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

Re: Mes premiers pas en 3D

Messagepar Eric » 23 Juil 2022 09:34

Bonjour Patrick

Je tente une surface de révolution. Je n'arrive pas à afficher la courbe qui engendre la surface. Je voudrais aussi faire apparaitre l'axe.

Merci d'avance.
Pièces jointes
Vol5_ex15.teg
(553 octets) Téléchargé 221 fois
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

Re: Mes premiers pas en 3D

Messagepar P.Fradin » 23 Juil 2022 10:32

Bonjour Eric,

Je te propose ceci :
Code: Tout sélectionner
[//command
 view(-10,1,-10,0.5), Marges(0,0,0,0), size(8),
 view3D(0,12,-10,10,-10,10),
 theta :=40*deg, phi :=30*deg,
 NewMac("f", "2*[1+1.5*t^2+i*t^3/1.5,1]", t),
 D := [Origin, -vecI], // axe
 C:=rotCurve(f(t), D, 0,1.5, 0,2*pi, 25, 50),
 Build3D(
         bdSep( // Plans séparateurs invisibles, surface non convexe
                for k from 0 to 24 do
                    getplan([M(2*(1+1.5*(k*1.5/24)^2),0,0),vecI]),
                od),
         bdFacet(C, [color:=lightgray]),
         bdDroite(D, scale:=1)
  ),
  Display3D(),
  tMin:=0, tMax:=1.5, NbPoints:=25, Width:=8,
  Courbe3D(f(t))
]

Vol5_ex15.png
Vol5_ex15.png (16.89 Kio) Consulté 16957 fois


Un mot d'explication sur la commande bdSep : la surface est non convexe, une facette peut entraîner un découpage des autres facettes, ce qui peut devenir visible lorsqu'il y en a trop. Si on coupe ta surface par tranches perpendiculaires à Ox, chaque tranche n'interférera pas avec le autres ce qui limite les découpages de facettes, c'est le rôle des plans séparateurs (ils sont bien sûr non affichés dans l'image).
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 » 23 Juil 2022 11:01

Je te remercie.
Je pensais que ma courbe génératrice était plane. Ca ne semble pas être le cas.

Comment tracer l'axe en pointillé ? J'ai tenté un linestyle:=dashed qui ne donne rien.
Et comment ajouter un label à la droite où à la courbe ?

Encore merci.
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

Re: Mes premiers pas en 3D

Messagepar P.Fradin » 23 Juil 2022 13:25

Je te rassure, ta courbe est parfaitement plane puisqu'elle est dans le plan $z=2$.

Code: Tout sélectionner
[//command
 view(-10,1,-10,0.5), Marges(0,0,0,0), size(8),
 view3D(0,12,-10,10,-10,10),
 theta :=40*deg, phi :=30*deg,
 NewMac("f", "2*[1+1.5*t^2+i*t^3/1.5,1]", t),
 D := [Origin, -vecI], // axe
 C:=rotCurve(f(t), D, 0,1.5, 0,2*pi, 25, 50),
 Build3D(
         bdSep( // Plan séparateurs invisibles, surface non convexe
                for k from 0 to 24 do
                    getplan([M(2*(1+1.5*(k*1.5/24)^2),0,0),vecI]),
                od),
         bdFacet(C, [color:=lightgray]),
         bdDroite(D, [scale:=1,linestyle:=userdash]),
  ),
  Display3D(),
  tMin:=0, tMax:=1.5, NbPoints:=25, Width:=8,
  Courbe3D(f(t)),
  LabelDot(Proj3D(f(1)), "$\mathcal C$","E")
]

Vol5_ex15-2.png
Vol5_ex15-2.png (16.87 Kio) Consulté 16956 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 » 23 Juil 2022 19:09

J'ai changé l'axe de rotation, ce qui change tout.

J'ai aussi changé l'opacité et j'ai ajouté un label à la droite.

Je voudrai tracer les cercles limite de la surface, correspondant à tmin et tmax. Comment faire ?
Pièces jointes
Vol5_ex15.teg
(1.15 Kio) Téléchargé 213 fois
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

Re: Mes premiers pas en 3D

Messagepar P.Fradin » 23 Juil 2022 22:52

Il y avait un problème d'orientation, j'ai changé le sens de parcours de la courbe.
Tu régleras l'opacité et le contraste à ta convenance.
Comme le volume est convexe, plus besoin de plans séparateurs.
Code: Tout sélectionner
[//command
 view(-2,7.5,-9.75,0.5), Marges(0,0,0,0), size(7.5),
 view3D(-5,12,-12,10,-10,10),
 theta:=20*deg, phi:=30*deg,
 NewMac("f", "2*[1+1.5*t^2-i*t^3/1.5,1]",t),
 D := [Origin,vecJ+vecI], // axe
 C:=rotCurve(f(t),D,-1.5,0,-pi,pi,25,50),
Build3D(
         bdFacet(C, [color:=lightgray,opacity:=0.95,contrast:=1]),
         bdDroite(D, [scale:=1,linestyle:=userdash]),
         bdLine(Bord(C),[width:=8])
  ),
  Display3D(),
  tMin:=-1.5, tMax:=0, NbPoints:=25, Width:=8,
  Courbe3D(f(t)),
  LabelDot(Proj3D(f(-1)),"$\mathscr{C}$","E",0,0.15),
  LabelDot(Proj3D(8.5*(vecJ+vecI)),"$\Delta$","E",0,0.2),
 ]

Vol5_ex15Bis.png
Vol5_ex15Bis.png (21.81 Kio) Consulté 16948 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 » 26 Juil 2022 10:49

Je te remercie. J'ai légèrement modifiée la surface pour que l'ouverture soit plus grande à la base.

Je passe aux cônes.
Je me suis inspiré du cylindre déjà fait pour sectionner une surface conique par un plan. Je voudrais maintenant hachurer la base (j'ai cru comprendre que ce n'est pas trivial) et ajouter sur le côté une flèche visualisant la hauteur du cône.
Pièces jointes
Vol4_ex2.teg
(1.26 Kio) Téléchargé 191 fois
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

Re: Mes premiers pas en 3D

Messagepar P.Fradin » 26 Juil 2022 13:15

Je te propose ceci :
Code: Tout sélectionner
[//command
  //view(-8,8,-5.5,5),
  Marges(0,0,0,0), //size(8),
  V:= [4-2*i,-5],
  C:=curve2Cone([4*cos(t)-cos(4*t)+i*(4*sin(t)-sin(4*t)),2],
      0,2*pi,V,1,B),
  P2:=[M(0,0,3)+V/2,vecJ+6*vecK],
  Delta := [M(2,-5,-4), V],
  // B récupère la liste des points 3d des bords haut et bas du cylindre
  C2:= Merge3d(Intersection(P2,C)),
  I := interDP([Delta,V],P2),
  H1 := B[45,2], H2 := [H1[1],-5],
  Build3D(
    bdPlan(P2,[color:=white, opacity:=0.7, scale:=1.4,contrast:=0.5]),
    bdFacet(C,[color:=white, opacity:=0.8, width:=2, border:=1]),
    bdLine(C2, [width:=6, color:=black]),
    bdLine([H1,H2], [arrows:=2,width:=6, color:=black]),
    bdLine([V,H2], [width:=2, color:=black]),
    bdLabel((H1+H2)/2,"$h$", [labelpos:=[0.25,1]])
  ),
  Display3D(),
  A:=(B[101,2]+B[103,2])/2, // 2ième point 3d du bord (le kième point est B[2k-1,2])
  //E:=(B[-155,2]+B[45,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),
  draw("line", Proj3D(B), [LineStyle:=noline, FillStyle:=fdiag, FillColor:=black]),
]

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

PrécédentSuivant

Revenir vers Questions - Réponses

Qui est en ligne ?

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

cron