Mes premiers pas en 3D

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

Mes premiers pas en 3D

Messagepar Eric » 25 Juin 2022 10:23

Bonjour Patrick

Je me mets à la 3D avec TexGraph (je vais devoir faire quelques figures pour mon prochain bouquin). Dans le fichier attaché, j'ai réalisé une surface cylindrique. Je voudrais ajouter un label à côté d'une des deux courbes directrices pour la nommer, ainsi qu'à côté d'une des génératrices à une des extrémités de la surface. Comment dois-je procéder ?

Merci d'avance,
Eric
Pièces jointes
Vol5_ex1.teg
(444 octets) 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 » 25 Juin 2022 10:57

Bonjour Eric,

Comme toujours avec la 3d tu as deux points de vue, sois tu raisonnes dans l'espace, soit sur le plan de projection.
Si tu es sûr de l'angle de vue de la figure (tu ne la feras plus tourner), tu peux avec la souris déterminer les affixes des points où tu veux placer un label.
Si tu veux raisonner dans l'espace tu peux récupérer les points (3d) des bords haut et bas de ton cylindre :
Code: Tout sélectionner
[//command
  Marges(0,0,0,0), //size(7.5+i*3),
  C:=curve2Cylinder([t+i*t^2/3,t/2.5],-5,5,[i,3.75], B),
  // B récupère la liste des points 3d des bords haut et bas du cylindre
  DrawFlatFacet(C,[color:=white]),
  A:=B[3,2], // 2ième point 3d du bord (le kième point est B[2k-1,2])
  LabelDot(Proj3D(A),"$A$","S",1),
  a := 2.65+i*3.2, // déterminé à la souris
  LabelDot(a,"Courbe $x(t)=t$, $y(t)=t^2$ et $z(t)=t/2.5$","E",0)
]


Vol5_ex1.png
Vol5_ex1.png (21.43 Kio) Consulté 15985 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 » 25 Juin 2022 11:06

Je te remercie, je vais regarder ceci de près.
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

Re: Mes premiers pas en 3D

Messagepar Eric » 25 Juin 2022 13:52

Comment ajouter une droite parallèle aux génératrices à côté de la surface ?
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

Re: Mes premiers pas en 3D

Messagepar P.Fradin » 25 Juin 2022 15:58

Code: Tout sélectionner
[//command
  Marges(0,0,0,0), //size(7.5+i*3),
  V := [i,3.75],
  C:=curve2Cylinder([t+i*t^2/3,t/2.5],-5,5,V, B),
  // B récupère la liste des points des bords haut et bas du cylindre
  A:=B[3,2], // 2ième point 3d du bord (le kième point est B[2k-1,2])
  Width := 6,
  DrawFlatFacet(C,[color:=white]),
  LabelDot(Proj3D(A),"$A$","S",1),
  a := 2.65+i*3.2, // déterminer à la souris
  LabelDot(a,"Courbe $x(t)=t$, $y(t)=t^2$ et $z(t)=t/2.5$","E",0),
  Width:=8, Color:=navy,
  Ligne3D( getdroite([M(0,-0.5,0),V],3),0),
]

Vol5_ex1-2.png
Vol5_ex1-2.png (38.22 Kio) Consulté 15978 fois


Par contre si tu veux mettre la droite parallèle à l'intérieur, il faut utiliser Build3D

Code: Tout sélectionner
[//command
  Marges(0,0,0,0), //size(7.5+i*3),
  V := [i,3.75],
  C:=curve2Cylinder([t+i*t^2/3,t/2.5],-5,5,V, B),
  // B récupère la liste des points des bords haut et bas du cylindre
  A:=B[3,2], // 2ième point 3d du bord (le kième point est B[2k-1,2])
  Build3D(
          bdDroite([M(0,1.38,0),V], [width:=8, color:=navy,scale:=3]),
          bdFacet(C, [width:=6, color:=white, border:=1, bordercolor:=black]),
          ),
  Display3D(),
  LabelDot(Proj3D(A),"$A$","S",1),
  a := 2.65+i*3.2, // déterminer à la souris
  LabelDot(a,"Courbe $x(t)=t$, $y(t)=t^2$ et $z(t)=t/2.5$","E",0),
]

Vol5_ex1-3.png
Vol5_ex1-3.png (38.19 Kio) Consulté 15978 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 » 25 Juin 2022 20:22

Je vais me contenter de la mettre à l'extérieur. Voici le résultat.

Pour la figure suivante, je souhaiterais couper la surface cylindrique précédente par un plan (à peu près) perpendiculaire aux génératrices.
Pièces jointes
Vol5_ex1.teg
(1.04 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 P.Fradin » 25 Juin 2022 22:50

Là par contre il faut Build3D:

Code: Tout sélectionner
[//command
  Marges(0,0,0,0), //size(7.5+i*3),
  V := -1.3*[1,-2.5], //[i,3.75], //x-2.5z=-0.5
  C:=curve2Cylinder([t-0.5+i*t^2/3,t/2.5]-V/8,-5,5,V,B),
  // B récupère la liste des points 3d des bords haut et bas du cylindre
  //DrawFlatFacet(C,[color:=white]),
  Build3D(
    bdPlan([M(-0.5,0,0)+V/3, V], [color:=green,opacity:=0.9,scale:=2]),
    bdFacet(C, [color:=white, border:=1]),
    bdDroite([M(0.5,-0.75,0),V], [color:=navy,width:=6,scale:=3])
  ),
  Display3D(),
  A:=(B[-95,2]+B[-97,2])/2, // 2ième point 3d du bord (le kième point est B[2k-1,2])
  E:=(B[-99,2]+B[1,2])/2, // 2ième point 3d du bord (le kième point est B[2k-1,2])
  LabelDot(Proj3D(A),"$\mathscr{C}$","N",0,0.15),
  LabelDot(Proj3D(E),"$D$","E",0,0.15),
  //a := 2.65+i*3.2, // déterminé à la souris
  //LabelDot(a,"Courbe $x(t)=t$, $y(t)=t^2$ et $z(t)=t/2.5$","E",0)
  Width:=6,Color:=navy,
  //Ligne3D(getdroite([M(0.5,-0.75,0),V],3),0),
  LabelDot(Proj3D(M(0.5,-0.75,0)),"$\Delta$","O",0,0.15),
]

Vol5_ex1-4.png
Vol5_ex1-4.png (36.72 Kio) Consulté 15973 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 » 27 Juin 2022 10:44

En fait, je voudrais couper la surface par deux plans et que l'on voit les traces de coupe, comme par exemple sur la photo attachée.
Cylindre.jpg
Cylindre.jpg (44.67 Kio) Consulté 15969 fois


Par exemple, à partir du fichier suivant.
Pièces jointes
Vol5_ex2.teg
(1.09 Kio) Téléchargé 193 fois
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

Re: Mes premiers pas en 3D

Messagepar P.Fradin » 27 Juin 2022 12:05

Quelque chose comme ça :

Code: Tout sélectionner
[//command
  view(-8,8,-5.5,5), Marges(0,0,0,0), size(8),
  V := [2*i,7],
  C:=curve2Cylinder([4*cos(t)-cos(4*t)+i*(4*sin(t)-sin(4*t)),-4],
  0,2*pi,V,B),
  P1 := [M(0,0,-2),vecK], P2:=[M(0,0,-2)+V/2,vecK],
  Delta := [M(2,-5,-4), V],
  // B récupère la liste des points 3d des bords haut et bas du cylindre
  C1 := Merge3d(Intersection(P1,C)), C2 := Merge3d(Intersection(P2,C)),
  I := interDP([Delta, V],P2),
  Build3D(
    bdPlan(P1,[color:=pink, opacity:=0.9, scale:=1.25]),
    bdPlan(P2,[color:=pink, opacity:=0.9, scale:=1.4]),
    bdFacet(C,[color:=white, opacity:=0.8, border:=0]),
    bdLine(Merge3d(C1), [width:=6, color:=blue]),
    bdLine(Merge3d(C2), [width:=6, color:=blue]),
    bdDroite([M(2,-5,-4), V], [width:=8, color:=red])
  ),
  Display3D(),
  A:=(B[-45,2]+B[-47,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])
  LabelDot(Proj3D(A),"$\mathscr{C}$","N",0,0.15),
  LabelDot(Proj3D(I),"$D$","NO",0,0.15),
]

Vol5_ex2.png
Vol5_ex2.png (29.71 Kio) Consulté 15967 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 » 27 Juin 2022 12:16

Je te remercie. Je vais la remettre en noir et blanc et l'imprimer pour voir ce que cela donne sur une feuille (à l'arrivée, ça doit finir dans un livre).
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

Re: Mes premiers pas en 3D

Messagepar P.Fradin » 28 Juin 2022 09:37

En noir et blanc avec les traits de construction du cylindre :
Code: Tout sélectionner
[//command
  view(-8,8,-5.5,5), Marges(0,0,0,0), size(8),
  V := [2*i,7],
  C:=curve2Cylinder([4*cos(t)-cos(4*t)+i*(4*sin(t)-sin(4*t)),-4],
  0,2*pi,V,B),
  P1 := [M(0,0,-2),vecK], P2:=[M(0,0,-2)+V/2,vecK],
  Delta := [M(2,-5,-4), V],
  // B récupère la liste des points 3d des bords haut et bas du cylindre
  C1 := Merge3d(Intersection(P1,C)), C2 := Merge3d(Intersection(P2,C)),
  I := interDP([Delta, V],P2),
  Build3D(
    bdPlan(P1,[color:=white, opacity:=0.9, scale:=1.25,contrast:=0.5]),
    bdPlan(P2,[color:=white, opacity:=0.9, scale:=1.4,contrast:=0.5]),
    bdFacet(C,[color:=white, opacity:=0.8, width:=2, border:=1]),
    bdLine(Merge3d(C1), [width:=6, color:=black]),
    bdLine(Merge3d(C2), [width:=6, color:=black]),
    bdDroite([M(2,-5,-4), V], [width:=8, color:=black])
  ),
  Display3D(),
  A:=(B[-45,2]+B[-47,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])
  LabelDot(Proj3D(A),"$\mathscr{C}$","N",0,0.15),
  LabelDot(Proj3D(I),"$D$","NO",0,0.15),
]

Vol5_ex2-2.png
Vol5_ex2-2.png (23.95 Kio) Consulté 15963 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 » 29 Juin 2022 09:43

Je te remercie. J'ai supprimé la droite D qui n'est plus nécessaire.

Je voudrais en plus hachurer la base supérieure du cylindre formé par les deux plans et visualiser la distance entre ces deux plans avec une flèche de l'un à l'autre.
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

Re: Mes premiers pas en 3D

Messagepar P.Fradin » 29 Juin 2022 10:49

Là ça se complique un peu pour faire des hachures dans une scène 3d ...
J'ai coupé le cylindre en deux cylindres, on dessine les hachures, puis la partie supérieure du cylindre par dessus la scène 3d.:
Code: Tout sélectionner
[//command
  view(-8,8,-5.5,5), Marges(0,0,0,0), size(8),
  V := [2*i,7],
  Cyl1:=curve2Cylinder([4*cos(t)-cos(4*t)+i*(4*sin(t)-sin(4*t)),-4],0,2*pi,V*5.5/7),
  Cyl2:=curve2Cylinder([4*cos(t)-cos(4*t)+i*(4*sin(t)-sin(4*t)),-4]+V*5.5/7,
        0,2*pi,V/5,B),
  // B récupère la liste des points 3d des bords haut et bas du cylindre
  P1 := [M(0,0,-2),vecK], P2:=[M(0,0,-2)+V/2,vecK], // plans
  C1 := Merge3d(Intersection(P1,Cyl1)), // intersection avec P1
  H1 := M(6,-4,-2), H2:=M(6,-4,1.5),  // pour dessiner la hauteur
  Build3D(
    bdPlan(P1,[color:=white, opacity:=0.9, scale:=1.25,contrast:=0.5]),
    bdPlan(P2,[color:=white, opacity:=0.9, scale:=1.4,contrast:=0.5]),
    bdFacet(Cyl1,[color:=white, opacity:=0.8, width:=2, border:=1]),
    bdLine(C1, [width:=6, color:=black]),
    bdLine([H1,H2], [width:=6, arrows:=2])
  ),
  Display3D(),
  A:=(B[-45,2]+B[-47,2])/2, // 2ième point 3d du bord (le kième point est B[2k-1,2])
  LabelDot(Proj3D(A),"$\mathscr{C}$","N",0,0.15),
  LabelDot(Proj3D((H1+H2)/2),"$h$","E",0,0.15),
  // contour hachuré
  FillStyle:=bdiag, Width:=6, FillColor:=black,
  Ligne3D([t:=0,
          for k from 1 to NbPoints do
            [4*cos(t)-cos(4*t)+i*(4*sin(t)-sin(4*t)),-4]+V*5.5/7,
            Inc(t,2*pi/NbPoints)
          od],1),
  // partie supérieure du cylindre
  Width := 2, FillStyle:=none, FillOpacity:=0.9,
  DrawFacet(Cyl2, [color:=white])
]

Vol5_ex2-3.png
Vol5_ex2-3.png (24.73 Kio) Consulté 15958 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 » 29 Juin 2022 11:31

C'est bizarre. Je n'obtiens pas la même image que toi.
Pièces jointes
Cylindre1.pdf
(194.45 Kio) Téléchargé 188 fois
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

Re: Mes premiers pas en 3D

Messagepar P.Fradin » 29 Juin 2022 12:10

Ce n'est pas normal du tout !
J'ai la bonne image dans l'interface graphique et en pdf.
Essaie déjà avec le source complet peut-être :
Vol5_ex2.teg
(1.69 Kio) Téléchargé 201 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 » 29 Juin 2022 17:51

Je viens de tester et j'ai le même problème que précédemment.
J'utilise la version 1.99 de TexGraph. Il faut peut-être que je passe à la 1.995 ?
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

Re: Mes premiers pas en 3D

Messagepar P.Fradin » 29 Juin 2022 18:27

Est-ce que tu peux m'envoyer le fichier exporté en tikz par texgraph que j'essaie de le compiler.
Ce serait sans mieux que tu passes à la dernière version. Mais je ne sais pas si le problème vient de là.
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 » 29 Juin 2022 18:36

Voici le fichier tikz. J'ai changé l'extension en txt pour pouvoir le poster sur le forum (qui n'accepte pas l'extension tkz).
Pièces jointes
Vol5_ex3.txt
(73.81 Kio) Téléchargé 186 fois
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

Re: Mes premiers pas en 3D

Messagepar P.Fradin » 29 Juin 2022 18:47

Effectivement je trouve le même problème que toi avec ce fichier.
Il faut donc que tu passes à la version 1.995 de texgraph.
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 » 30 Juin 2022 00:07

Je viens de passer à la version 1.995 et j'ai encore le même problème. Peut-être faut-il que j'installe des modèles ?
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

Re: Mes premiers pas en 3D

Messagepar P.Fradin » 30 Juin 2022 09:49

Bon je viens de trouver l'erreur, dans le source j'ai mis à plusieurs reprises un vecteur fois un scalaire, ce qui sera possible dans la future version mais pas dans les versions actuelles, donc correction :
Code: Tout sélectionner
[//command
  view(-8,8,-5.5,5), Marges(0,0,0,0), size(8),
  viewDir(39,75), //angles de vues theta et phi
  V := [2*i,7], NbPoints := 100,
  Cyl1:=curve2Cylinder([4*cos(t)-cos(4*t)+i*(4*sin(t)-sin(4*t)),-4],0,2*pi,5.5/7*V),
  Cyl2:=curve2Cylinder([4*cos(t)-cos(4*t)+i*(4*sin(t)-sin(4*t)),-4]+5.5/7*V,
        0,2*pi,V/5,B),
  // B récupère la liste des points 3d des bords haut et bas du cylindre
  P1 := [M(0,0,-2),vecK], P2:=[M(0,0,-2)+V/2,vecK], // plans
  C1 := Merge3d(Intersection(P1,Cyl1)), // intersection avec P1
  H1 := M(6,-4,-2), H2:=M(6,-4,1.5),  // pour dessiner la hauteur
  Build3D(
    bdPlan(P1,[color:=white, opacity:=0.9, scale:=1.25,contrast:=0.5]),
    bdPlan(P2,[color:=white, opacity:=0.9, scale:=1.4,contrast:=0.5]),
    bdFacet(Cyl1,[color:=white, opacity:=0.8, width:=2, border:=1]),
    bdLine(C1, [width:=6, color:=black]),
    bdLine([H1,H2], [width:=6, arrows:=2]),
      ),
  Display3D(),
  A:=(B[-45,2]+B[-47,2])/2, // 2ième point 3d du bord (le kième point est B[2k-1,2])
  LabelDot(Proj3D(A),"$\mathscr{C}$","N",0,0.15),
  LabelDot(Proj3D((H1+H2)/2),"$h$","E",0,0.15),
    FillStyle:=bdiag, Width:=6, FillColor:=black,
  Ligne3D([t:=0,
          for k from 1 to NbPoints do
            [4*cos(t)-cos(4*t)+i*(4*sin(t)-sin(4*t)),-4]+5.5/7*V,
            Inc(t,2*pi/NbPoints)
          od],1),
  FillOpacity := 0.8,
  DrawFacet(Cyl2,[color:=white, Width:=2])
]
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 » 30 Juin 2022 10:05

Effectivement, ça va beaucoup mieux comme ça. Je te remercie encore ! Ça m'aura fait passer à la dernière version de TexGraph.

Mon nouveau problème : je voulais faire la même chose que précédemment (sans les hachures), mais avec un polygone comme base, plutôt qu'une fonction définie par une formule. Je ne vois pas de commande dans la documentation pour dessiner une surface prismatique.
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

Re: Mes premiers pas en 3D

Messagepar Eric » 30 Juin 2022 10:29

Autre question.

J'ai modifié dans le fichier le vecteur v en V := [1+i,7]. J'obtiens un cylindre droit. Je voudrais visualiser quelques angles droits entre un plan de coupe et des génératrices. J'ai vu sur un exemple dans la doc que tu utilises la commande angleD. Mais ça ne tient pas compte de l'effet de perspective. Y a-t-il une commande spécifique ?
Pièces jointes
Vol5_ex4.teg
(1.45 Kio) Téléchargé 153 fois
Eric
 
Messages: 298
Inscription: 07 Août 2009 21:05
Localisation: Asnieres

Re: Mes premiers pas en 3D

Messagepar P.Fradin » 30 Juin 2022 10:56

Eric a écrit:Effectivement, ça va beaucoup mieux comme ça. Je te remercie encore ! Ça m'aura fait passer à la dernière version de TexGraph.

Mon nouveau problème : je voulais faire la même chose que précédemment (sans les hachures), mais avec un polygone comme base, plutôt qu'une fonction définie par une formule. Je ne vois pas de commande dans la documentation pour dessiner une surface prismatique.

C'est la commande line2Cylinder.
Code: Tout sélectionner
[//command
  view(-8,8,-5.5,5), Marges(0,0,0,0), size(8),
  viewDir(39,75), //angles de vues theta et phi
  V := [2*i,7], NbPoints := 100,
  ligne := polyreg(0,4,8), //1.5*[-1+i, -3-i, 2-3*i, 1, 3+3*i, -1+i],
  L := [for z in ligne do [z,-3.75] od, ligne[1],-3.75], // polygone de base
  Cyl1:=line2Cylinder(L,V,0,B),
  // B récupère la liste des points 3d des bords haut et bas du cylindre
  P1 := [M(0,0,-2),vecK], P2:=[M(0,0,-2)+V/2,vecK], // plans
  C1 := Merge3d(Intersection(P1,Cyl1)), // intersection avec P1
  C2 := Merge3d(Intersection(P2,Cyl1)), // intersection avec P2
  H1 := M(6,-4,-2), H2:=M(6,-4,1.5),  // pour dessiner la hauteur
  Build3D(
    bdPlan(P1,[color:=white, opacity:=0.9, scale:=1.25,contrast:=0.5]),
    bdPlan(P2,[color:=white, opacity:=0.9, scale:=1.4,contrast:=0.5]),
    bdFacet(Cyl1,[color:=white, opacity:=0.8, width:=2, border:=1]),
    bdLine(C1, [width:=6, color:=black]),
    bdLine(C2, [width:=6, color:=black]),
    bdLine([H1,H2], [width:=6, arrows:=2]),
      ),
  Display3D(),
  A:=(B[-5,2]+B[-7,2])/2, // 2ième point 3d du bord (le kième point est B[2k-1,2])
  LabelDot(Proj3D(A),"$P$","N",0,0.15),
  LabelDot(Proj3D((H1+H2)/2),"$h$","E",0,0.15),
]

Vol5_ex2-4.png
Vol5_ex2-4.png (11.41 Kio) Consulté 15929 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 » 30 Juin 2022 11:25

Eric a écrit:Autre question.

J'ai modifié dans le fichier le vecteur v en V := [1+i,7]. J'obtiens un cylindre droit. Je voudrais visualiser quelques angles droits entre un plan de coupe et des génératrices. J'ai vu sur un exemple dans la doc que tu utilises la commande angleD. Mais ça ne tient pas compte de l'effet de perspective. Y a-t-il une commande spécifique ?


Je pense qu'il vaudrait mieux prendre V = [0,7] pour que le cylindre soit droit !
Code: Tout sélectionner
[//command
  view(-8,8,-5.5,5), Marges(0,0,0,0), size(8),
  viewDir(39,75), //angles de vues theta et phi
  V := [0,7], NbPoints := 100,
  Cyl1:=curve2Cylinder([4*cos(t)-cos(4*t)+i*(4*sin(t)-sin(4*t)),-4],0,2*pi,5.5/7*V),
  Cyl2:=curve2Cylinder([4*cos(t)-cos(4*t)+i*(4*sin(t)-sin(4*t)),-4]+5.5/7*V,
        0,2*pi,V/5,B),
  // B récupère la liste des points 3d des bords haut et bas du cylindre
  P1 := [M(0,0,-2),vecK], P2:=[M(0,0,-2)+V/2,vecK], // plans
  C1 := Merge3d(Intersection(P1,Cyl1)), // intersection avec P1
  H1 := M(6,-4,-2), H2:=M(6,-4,1.5),  // pour dessiner la hauteur
  t:= pi/2-0.36, a := [4*cos(t)-cos(4*t)+i*(4*sin(t)-sin(4*t)),-4]+2/7*V,
  b := a + pxy(a),
  c := a + vecK,
  t:= -1.05, a' := [4*cos(t)-cos(4*t)+i*(4*sin(t)-sin(4*t)),-4]+2/7*V,
  b' := a' + pxy(a'),
  c' := a' + vecK,
  Build3D(
    bdPlan(P1,[color:=white, opacity:=0.9, scale:=1.25,contrast:=0.5]),
    bdPlan(P2,[color:=white, opacity:=0.9, scale:=1.4,contrast:=0.5]),
    bdFacet(Cyl1,[color:=white, opacity:=0.8, width:=2, border:=1]),
    bdLine(C1, [width:=6, color:=black]),
    bdLine([H1,H2], [width:=6, arrows:=2]),
    bdAngleD(b,a,c,0.5),
    bdAngleD(b',a',c',0.5),
      ),
  Display3D(),
  A:=(B[-45,2]+B[-47,2])/2, // 2ième point 3d du bord (le kième point est B[2k-1,2])
  LabelDot(Proj3D(A),"$\mathscr{C}$","N",0,0.15),
  LabelDot(Proj3D((H1+H2)/2),"$h$","E",0,0.15),
    FillStyle:=bdiag, Width:=6, FillColor:=black,
  Ligne3D([t:=0,
          for k from 1 to NbPoints do
            [4*cos(t)-cos(4*t)+i*(4*sin(t)-sin(4*t)),-4]+5.5/7*V,
            Inc(t,2*pi/NbPoints)
          od],1),
  FillOpacity := 0.8,
  DrawFacet(Cyl2,[color:=white, Width:=2])
]

Vol5_ex2-5.png
Vol5_ex2-5.png (14.08 Kio) Consulté 15927 fois
P.Fradin
Avatar de l’utilisateur
P.Fradin
Administrateur du site
 
Messages: 1887
Inscription: 29 Oct 2008 15:04

Suivant

Revenir vers Questions - Réponses

Qui est en ligne ?

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

cron