rotCurve

Voir le sujet précédent Voir le sujet suivant Aller en bas

rotCurve

Message  charly le Ven 12 Sep - 0:11

Bonsoir,

1) La fonction rotCurve est-elle accessible directement sur Texgraph ou faut-il la retaper?
2) Dois-je aussi remettre la macro fenêtre à chaque fois que je fais un dessin de ce type?
3) Si je désire faire tourner y=x^{1/2} la courbe autour de Ox avec 0<x<4 et si désire que mon axe x et mon axe y soient permutés avec les votres comment dois-je m'y prendre?

Merci.

Charly
(PS pour Patrick désoolé d'avoir pollué un endroit propre en postant la même qustion sous exemple)

charly

Nombre de messages : 26
Age : 55
Date d'inscription : 11/02/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: rotCurve

Message  P.Fradin le Ven 12 Sep - 0:48

charly a écrit:Bonsoir,
Bonsoir Charly,


1) Votre fonction rotCurve est-elle accessible directement sur Texgraph ou faut-il la retaper?

Si vous utlilisez la version 1.93, elle est accessible à condition de charger le modèle scene3d.mod (menu Fichier/Charger un modèle). Si vous utilisez la version test 1.94, ce chargement est inutile.

Puis dans un élément graphique utilisateur essayer la commande:

Code:

[view3D(-4,5,-4,4,-4,4),
 Arrows:=1, Axes3D(0,0,0), Arrows:=0,
 S:=rotCurve( M(t,sqrt(t),0), [M(0,0,0),vecI], 0,4, -pi,pi,15,25),
 Color:=blue,
 DrawPolyNC(S,0)] 

Ce qui doit donner ceci:

M(t,sqrt(t),0) est le paramètrage de la courbe dans l'espace (x=t, y=srqt(t), z=0)
[M(0,0,0),vecI] représente l'axe de la rotation: passant par M(0,0,0) et dirigé par vecI,
0,4: intervalle de t
-pi,pi: intervalle pour l'angle de la rotation
15,25: grille (15 points pour t et 25 pour la rotation)


2) Dois-je aussi remettre la macro fenêtre à chaque fois que je fais un dessin de ce type?
Non, car il y maintenant la macro view3D qui est incorporée


3) Si je désire faire tourner y=x^{1/2} la courbe autour de Ox avec 0<x<4

C'est l'exemple proposé.


et si désire que mon axe x et mon axe y soient permutés avec les votres comment dois-je m'y prendre?

Là je ne suis pas sûr de comprendre. Faire la courbe z=y^{1/2} autour de Oy? Si c'est ça, on écrit:

Code:

S:=rotCurve( M(0,t,sqrt(t)), [M(0,0,0),vecJ], 0,4, -pi,pi,15,25),

Une remarque si vous utilisez la version 1.94, on peut dessiner la surface et les axes en gérant automatiquement les parties cachées:

Code:

[view3D(-4,5,-4,4,-4,4),
 S:=rotCurve( M(t,sqrt(t),0), [M(0,0,0),-vecI], 0,4, -pi,pi,15,25),
 Build3D(
        bdAxes([0,0], [color:=gold, arrows:=1]),
        bdFacet(S, [color:=steelblue])
        ),
 Display3D()


ce qui donne:



Charly qui apprend gentiment à manier votre logiciel

Ce qui n'est pas si évident que cela Laughing !


Dernière édition par P.Fradin le Dim 14 Sep - 13:01, édité 1 fois

_________________
P.Fradin

P.Fradin
Admin

Nombre de messages : 1133
Age : 55
Date d'inscription : 19/01/2008

Voir le profil de l'utilisateur http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

rotCurve

Message  charly le Ven 12 Sep - 19:21

Merci. Efficace!

Est-il trop gourmand de vouloir représenter une appromaion d'un volume de révolution de f(x)=x^(2)-6x+10 entre x=1 et x=5 par une 8 anneaux cylindriques(Riemann)? Sans vouloir la généralisation 3D du programme Riemann de Samuel, au moins pour un exemple simple...

J'ai essayé, mais c'est lourd et pitoyable au niveau des couleurs....

Charly

charly

Nombre de messages : 26
Age : 55
Date d'inscription : 11/02/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: rotCurve

Message  P.Fradin le Ven 12 Sep - 23:02

charly a écrit:Merci. Efficace!

Merci charly,


Est-il trop gourmand de vouloir représenter une appromaion d'un volume de révolution de f(x)=x^(2)-6x+10 entre x=1 et x=5 par une 8 anneaux cylindriques(Riemann)? Sans vouloir la généralisation 3D du programme Riemann de Samuel, au moins pour un exemple simple...

C'est tout à fait faisable mais cela demande de créer une autre macro que rotCurve pour dessiner un empilement de cylindres pleins. Appelons cette macro volume, avec la syntaxe:
volume( f(t), [options] )

où f(t) est le paramètrage de la courbe dans l'espace, et les options possibles sont:

axe := [point3D, vecteur3D] (axe de la rotation, [M(0,0,0),vecI] par défaut)
slice := nombre (nombre de tranches, 5 par défaut)
facet := nombre (nombre de facettes, 25 par défaut)
t :=[tmin, tmax] (intervalle pour le paramètre t, [-5,5] par défaut)

Le code de la macro volume:

Code:

{volume( f(t), [options])
options:
    axe := [point3D, vecteur3D] axe de la rotation [M(0,0,0),vecI] par défaut)
    slice := nombre de tranches (5 par défaut)
    facet := nombre de facettes (25 par défaut)
    t :=[tmin, tmax] intervalle pour le paramètre t ([-5,5] par défaut)
}
[$t:=[-5,5], $slice:=5, $facet:=25, $axe:=[0,0,vecI],
 SaveAttr(),
 $aux:=Eval(String(%2)),
 $tmin:=Copy(t,1,1), $tmax:=Copy(t,2,1),
 $pas:=(tmax-tmin)/slice, $x:=tmin,
 $vect:= Copy(axe,3,2),
 Assign(%1,t,x),$fin:=%1, $B:=interDP(axe,[fin,vect]),
 for $k from 1 to slice do
    A:=B,
    deb:=fin, Inc(x,pas), Assign(%1,t,x), $fin:=%1,
    $B:=interDP(axe,[fin,vect]),
    Cylindre(A, B-A, Norm(deb-A),facet,1)
  od,
RestoreAttr()]

Le code d'un élément graphique Utilisateur pour tester (version 1.94 uniquement):

Code:

[view3D(-7,7,-7,7,-7,7),view(-8,8,-8,8),size(11),
background(full,skyblue),
V:=volume( M(t, t^2-6*t+10, 0),  [t:=[1,5], slice:=8]),
Build3D(
        bdFacet(V, [color:=tomato,backculling:=1,contrast:=1.5]),
        bdLine(Aretes(V),[color:=black, width:=8]),
        bdAxes([0,0], [color:=gold, arrows:=1,width:=8, arrowscale:=1.5])
        ),
Display3D()] 

ce qui donne:


Dernière édition par P.Fradin le Dim 14 Sep - 15:55, édité 1 fois

_________________
P.Fradin

P.Fradin
Admin

Nombre de messages : 1133
Age : 55
Date d'inscription : 19/01/2008

Voir le profil de l'utilisateur http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

cylindres

Message  charly le Sam 13 Sep - 1:10

Merci beaucoup. Très réussi.
A bientôt.

Charly

charly

Nombre de messages : 26
Age : 55
Date d'inscription : 11/02/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: rotCurve

Message  P.Fradin le Sam 13 Sep - 11:45

Je viens de me rendre compte à l'occasion, qu'il y a un problème avec les options dans Build3D lorsque celles-ci correspondent à des variables locales dans la commande définie par l'utilisateur. Il va falloir trouver une parade pour qu'il ne puisse pas y avoir de collision entre les options et les variables de l'utilisateur. A priori il faudrait définir toutes les options comme variables globales, je vais essayer...

_________________
P.Fradin

P.Fradin
Admin

Nombre de messages : 1133
Age : 55
Date d'inscription : 19/01/2008

Voir le profil de l'utilisateur http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

Re: rotCurve

Message  P.Fradin le Sam 13 Sep - 12:32

Bon effectivement cela a l'air de mieux marcher si les options sont toutes déclarées en variables globales (mais il faut poursuivre les tests).

Voici le nouveau scene3d.mac: scene3d.mac.zip. Il doit remplacer l'ancien qui est dans <chemin>/TeXgraph/macros

Pour tester, j'ai modifié l'exemple de charly de manière à bien montrer la courbe dans le plan xOy, les rectangles dans ce même plan, et le volume engendré par rotation autour de Ox. Bien sûr j'ai du enlever une partie du volume pour voir l'intérieur. Avec la même macro volume, et ce nouvel élément graphique:

Code:

[view3D(-7,7,-7,7,-7,7),view(-8,8,-8,8),size(11),
background(full,skyblue),
V:=volume( M(t,t^2-6*t+10,0), [t:=[1,5],slice:=8]),
C:= Parallelep(M(0,0,0),15*vecI,15*vecJ,15*vecK), {cube}
V:=Clip3D(V,C,1), {V est clippé avec le cube}
Build3D(
        bdFacet(V, [color:=tomato,backculling:=0,contrast:=1.5]),
        bdPlan( [0,0,vecK], [color:=darkseagreen, opacity:=0.8, scale:=0.85]),
        bdCurve( M(t,t^2-6*t+10,0), [t:=[1,5], color:=green, tube:=1]),
        bdAxes([0,0], [color:=gold, width:=8, arrows:=1, arrowscale:=1.5])
        ),
Display3D()]   

On obtient:

On voit d'ailleurs qu'en réalité les tranches sont creuses!

_________________
P.Fradin

P.Fradin
Admin

Nombre de messages : 1133
Age : 55
Date d'inscription : 19/01/2008

Voir le profil de l'utilisateur http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

Très joli

Message  charly le Sam 13 Sep - 18:19

Bonjour

Mais c'est moins joli chez moi. Pour obtenir une figure aussi bien présentée que celle proposée il serait agréable que je puisse faire subir à mon repère une petite rotation autour de Oz. C'est peut-être de la coquetterie, mais j'ai eu des problèmes du même type avec des fonctions à croissance variable sur un intervalle générant des problèmes de vus et cachés.

Pendant que j'y suis, j'ai essayé de représenter le volume engendé par la rotation autour de Ox du domaine délimité par $f(x)=−x^2-4x+1$ et $g(x)=x+5$. Et la échec. Je suis sur que lorsqu'on a ce qui précède cette repréentation est possible.

Merci.

Charly

charly

Nombre de messages : 26
Age : 55
Date d'inscription : 11/02/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: rotCurve

Message  P.Fradin le Dim 14 Sep - 12:44

charly a écrit:Bonjour

Bonjour charly,


Mais c'est moins joli chez moi. Pour obtenir une figure aussi bien présentée que celle proposée il serait agréable que je puisse faire subir à mon repère une petite rotation autour de Oz.

Tu peux faire pivoter la figure dans l'interface graphique! Bon, cela peut parfois être un peu lent en fonction des calculs, mais tu as deux méthodes:

1) onglet Supplément 3D: les flêches rouges, mais tu peux aussi préciser les angles de vue theta et phi.

2) onglet Standard: prendre le cinquième bouton partant de la droite et tu peux faire tourner alors la figure à la souris (ne pas être trop pressé!)



Pendant que j'y suis, j'ai essayé de représenter le volume engendé par la rotation autour de Ox du domaine délimité par $f(x)=−x^2-4x+1$ et $g(x)=x+5$. Et la échec. Je suis sur que lorsqu'on a ce qui précède cette repréentation est possible.

Ok, je regarde ça dans la journée.

_________________
P.Fradin

P.Fradin
Admin

Nombre de messages : 1133
Age : 55
Date d'inscription : 19/01/2008

Voir le profil de l'utilisateur http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

Re: rotCurve

Message  P.Fradin le Dim 14 Sep - 15:54

charly a écrit:
Pendant que j'y suis, j'ai essayé de représenter le volume engendé par la rotation autour de Ox du domaine délimité par $f(x)=−x^2-4x+1$ et $g(x)=x+5$. Et la échec. Je suis sur que lorsqu'on a ce qui précède cette repréentation est possible.

Après réflexion, je pense qu'il faut créer une macro pour cela, qui ressemble à rotCurve, mais pour une ligne polygonale de l'espace. Appelons-la rotLine, voici sa définition (et sa syntaxe):

Code:

{rotLine( Liste de points 3D, Axe, <angle min, angle max, nb facettes>)}
[$axe:=%2, $vect:= Copy(axe,3,2),
 $anglemin:= if %3=Nil then 0 else %3 fi,
 $anglemax:= if %4=Nil then 2*pi else %4 fi,
 $facet:=if %5=Nil then 25 else %5 fi,
 $pas:=(anglemax-anglemin)/facet,
 $L:=rot3d(%1,axe,anglemin),
 $fin:=Copy(L,1,2), $B:=interDP(axe,[fin,vect]),
 for $Z in L[3,0] By 2 do
    $A:=B, $deb:=fin, fin:=Z,
    $B:=interDP(axe,[fin,vect]),
    $x:=0, $C':=deb, $D':=fin,
    for $k from 1 to facet do
        Inc(x,pas), $C:=C', $D:=D',
        D':=rot3d(fin,axe,x), C':=rot3d(deb,axe,x),
        $face:=C',
        $aux:= for $M in [D',D,C] By 2 do Inserer3D(face,M) od,
        face,jump
    od,
 od]

Un élément graphique pour tester l'exemple de charly:

Code:

[view3D(-7,9,-7,9,-7,9),view(-11,7,-9,9),size(11),
background(full,skyblue),
NbPoints:=25, tMin:=-8, tMax:=8,
L:= for z in Get( domaine3(t^2-4*t+1, t+5, 1), 0) do [z,0] od,
V:=rotLine( L, [0,0,-vecI], 0, 3*pi/2, 20),
Build3D(
      bdFacet(V, [color:=tomato, twoside:=0]),
      bdAxes( [0,0], [color:=gold,arrows:=1])
      ),
Display3D(),
LineStyle:=dotted,Width:=12,
Ligne3D(L,0)]

ce qui donne avec theta=64 et phi=56:

Une petite explication pour le calcul du contour L, c'est le passage:

Code:

NbPoints:=25,
L:= for z in Get( domaine3(t^2-4*t+1, t+5, 1), 0) do [z,0] od,

on fixe le nombre de points à 25,
la fonction Get exécute la macro domaine3, mais sans faire le dessin, et en extrait la liste des points 2D formant le contour du domaine délimité par les deux fonctions citées (l'argument 1 autorise texgraph à couper le pas en deux une fois quand c'est nécessaire), le dernier argument 0 signifie que la liste des points extraite ne doit pas être clippée. On a donc le contour 2d grâce à la fonction Get, la boucle for permet alors à la variable z de parcourir cette liste et pour chaque point renvoie ses coordonnées 3D (avec une cote nulle, ce qui donne [z,0]).

Je n'ai pas dessiné le volume complet, seulement de 0 à 3pi/2, pour voir l'intérieur. L'exemple de charly est un peu complexe car le domaine s'étend de part et d'autre de l'axe Ox, ce qui explique cette "boursouflure" à l'intérieur. Pour mieux s'en rendre compte, j'ai ajouté le dessin du coutour en pointillés par dessus la scène.


Dernière édition par P.Fradin le Lun 15 Sep - 18:45, édité 1 fois

_________________
P.Fradin

P.Fradin
Admin

Nombre de messages : 1133
Age : 55
Date d'inscription : 19/01/2008

Voir le profil de l'utilisateur http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

Re: rotCurve

Message  charly le Dim 14 Sep - 23:30

Encore quelques questions....


1) Si je désire enlever les lettres figurant aux extrémités des axes, comment faire?

2) Si je désire mettre la lettre x à la place du y, la lettre y à la place de la lettre z et la lettre z à la place de la lettre x comment faire?
(en fait je désireais avoir Ox à la place de Oy, Oy à la place de Oz et Oz à la place de Ox pour retrouver la courbe à faire tourner dans une position standard)

3) Le passage en eps est-il obligatoire pour garder les couleurs de ces desssins? Je n'ai rien trouvé de mieux...

4) Avec une adaptation à d'autres courbes de ton dernier modèle, j'ai quelques problèmes. Par exemple, si j'essaie de faire tourner le domaine délimité par $y=\sqrt(t) $et $y=t$ autour de Ox, il y a des problèmes.(je n'ai que les axes... Embarassed )

charly

Nombre de messages : 26
Age : 55
Date d'inscription : 11/02/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: rotCurve

Message  P.Fradin le Lun 15 Sep - 1:00

charly a écrit:Encore quelques questions....


1) Si je désire enlever les lettres figurant aux extrémités des axes, comment faire?

option labels:=0 (voir fichier scene3d.mac en faisant menu Aide/fichiers pdf).


2) Si je désire mettre la lettre x à la place du y, la lettre y à la place de la lettre z et la lettre z à la place de la lettre x comment faire?
(en fait je désireais avoir Ox à la place de Oy, Oy à la place de Oz et Oz à la place de Ox pour retrouver la courbe à faire tourner dans une position standard)

En fait tu souhaites une rotation d'axe [M(0,0,0), M(1,1,1)] et d'angle 2pi/3 Laughing C'est possible en changement la matrice 3D par défaut (voir exemple ci-dessous).


3) Le passage en eps est-il obligatoire pour garder les couleurs de ces desssins? Je n'ai rien trouvé de mieux...

??? si tu as des problèmes de couleurs en pgf ou pstricks c'est que ta version de xcolor est obsolète. Une mise à jour s'impose peut-être (tant qu'a faire autant mettre aussi à jour: pgf, pstricks, pstricks-add).


4) Avec une adaptation à d'autres courbes de ton dernier modèle, j'ai quelques problèmes. Par exemple, si j'essaie de faire tourner le domaine délimité par $y=\sqrt(t) $et $y=t$ autour de Ox, il y a des problèmes.(je n'ai que les axes... Embarassed )

Le problème est lié au fait qu'en calcul flottant texgraph ne tombe pas pile sur la valeur t=0 lorsqu'il détermine les points d'intersection, et comme l'une n'est pas définie à gauche de 0, il ne trouve tout simplement pas le premier point d'intersection des 2 courbes. Pour contourner le problème, comme on connaît ces deux points d'intersection, on utilise la macro domaine2 car dans celle-ci on peut préciser d'où à où on détermine le contour:

Code:

[view3D(-2,2,-2,2,-2,2),view(-1,2.5,-1.5,2.5),size(11),
background(full,gray),
NbPoints:=20,
L:= for z in Get( domaine2(sqrt(t), t, 0,1,0), 0) do [z,0] od,
V:=rotLine( L, [0,0,-vecI], 0, pi, 20),
SetMatrix3D(matrix3d( rot3d(M,[0,0,M(1,1,1)],2*pi/3))),
Build3D(
      bdFacet(V, [color:=steelblue, twoside:=0]),
      bdAxes( [0,0], [color:=gold,arrows:=1])
      ),
Display3D(),
LineStyle:=dotted, Width:=12, Ligne3D(L,0)]         

ce qui donne:

Le changement de matrice a lieu dans cette instruction:

Code:

SetMatrix3D(matrix3d( rot3d(M,[0,0,M(1,1,1)],2*pi/3))),
la macro matrix3d renvoit la matrice de la transformation citée en argument (fonction de M) et la commande SetMatrix3D prend cette matrice comme matrice de transformation par défaut, elle affecte tous les affichages dans l'espace.

_________________
P.Fradin

P.Fradin
Admin

Nombre de messages : 1133
Age : 55
Date d'inscription : 19/01/2008

Voir le profil de l'utilisateur http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

Spectaculaire

Message  charly le Lun 15 Sep - 1:47

Exactement ce que je souhaitais!

Merci pour tout ; je vais digérer tout ça et m'y remettre demain.

Bonne soirée.


Charly

charly

Nombre de messages : 26
Age : 55
Date d'inscription : 11/02/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: rotCurve

Message  Contenu sponsorisé Aujourd'hui à 6:00


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum