Tracé d'un trèfle en Maple

Discutez d'informatique ici !
Lemniscate
Membre Relatif
Messages: 300
Enregistré le: 18 Jan 2009, 19:55

Tracé d'un trèfle en Maple

par Lemniscate » 21 Fév 2009, 21:43

Bonjour,

J'ai été intrigué par le trèfle de l'avatar d'uztop, qui m'a dit où il l'avait trouvé (source).

J'ai bien aimé la méthode de construction, elle est simple mais assez fastidieuse sur papier (j'ai essayé :) ).

Donc j'ai voulu faire une petite procédure Maple pour tracer tout ça. En fait j'ai utilisé la fonction de Maple qui permet de tracé point par point (avec le package with(plots) ). J'ai juste défini une partie du dessin, j'obtiens le reste grâce à des symétries axiales simples.

Je vous la soumet (elle marche, je l'ai testé) (j'ai noté 1,2,3,4,5,6 les différentes parties du trèfle) :

> restart;
> with(plots):

trefle:=proc(n::even)
> local m,P,L,L2,L56,L34,C,i,j,k,t;
> m:=n;
> L2:=[];
> L:=[[0,0]];
> L56:=[];
> L34:=[];
> C:=[[0,0],[m,m],[m,0],[0,m],[m,m],[0,0]];
>
> for i from 1 to (m/2) do L:=[op(L),[0,i],[(m/2)+1-i,(m/2)+1-i],[0,i]];od;
>
> L2:=L;
>
> for j from 1 to (3*(m/2)+1) do L2[j][2]:=(m-L2[j][2]);od;
>
> P:=[op(L),op(L2)];
> L56:=P;
>
> for k from 1 to 6*(m/2)+2 do L56[k][1]:=(m-L56[k][1]);od;
>
> L34:=P;
>
> for t from 1 to 6*(m/2) do L34[t][1]:=(m-P[t][2]); L34[t][2]:=(m-P[t][1]);od;
>
> L:=[op(C),op(L),op(L2),[0,m/2],[0,0],[m,0],op(L56),[m,m],op(L34)];
>
> plot(L,scaling=constrained);
> end;


Voilà le résultat pour n=18 :
Image

Alors en fait tout marche très bien jusqu'à n=32, après Maple ne trace plus rien et me dit :
Error, (in trefle) assigning to a long list, please use Arrays


Donc si je comprends bien, si n est trop grand, la liste est trop longue. Mais pourquoi et comment utiliser des vecteurs ("Arrays") ? Je vois pas comment faire et pourquoi cela serait plus facile pour Maple...

En fait j'aimerais atteindre n=100 pour avoir une jolie figure :)

Autre question :

J'ai l'impression que cette figure (si on lui rajoute sa quatrième partie, en fait trèfle à quatres feuilles :) ) s'obtient par une transformation (bijective) affine du plan R^2, de centre (n/2,n/2), ce que l'on peut remarquer en imaginant le "quadrillage canonique" de R^2 qui aurait été déformé. Est-ce qu'on peut exprimer cette transformation du plan ?
Est-ce que je peux faire intervenir une fonction plutôt que le tracé point par point ?


Merci pour vos réponses et n'hésitez pas à me demander plus de précisions...

Au revoir.



uztop
Membre Complexe
Messages: 2396
Enregistré le: 12 Sep 2007, 11:00

par uztop » 21 Fév 2009, 23:50

Salut,

un topic sur mon avatar, ça fait plaisir ça :we:
Je ne connais pas trop Maple (j'ai du m'en servir deux ou trois fois en prépa, c'est tout) donc je ne pourrai pas trop t'aider.
Mais, si je comprends bien ce que tu as écrit, tu traces la figure point par point, pourquoi est ce que tu ne la tracerais pas droite par droite au moins, ça serait déjà beaucoup plus simple.

Lemniscate
Membre Relatif
Messages: 300
Enregistré le: 18 Jan 2009, 19:55

par Lemniscate » 21 Fév 2009, 23:58

Salut,

Enfait le tracé se fait "segment par segment", je ne fait que donner les extrémités de chaque segment, sachant que chaque segment tracé a une extrémité commune avec le précédent et l'autre extrémité avec le suivant.

Mais peut-être que je n'ai pas saisi exactement ce que tu voulais dire ?

Le but de ce message n'était évidemment pas de faire un message à ta gloire uztop :) Mais c'est juste que ce type de construction m'a plu !

Si jamais (cf premier post) on peut trouver la transformation affine qui donne cette figure, là je serais comblé !

Merci !

EDIT : Dans le bouquin que j'ai emprunté, ils donnent un paramétrage de la feuille d'érable (symbole de Maple). Si ca intéresse quelqu'un ?

En parlant de paramétrage, peut-on paramétrer explicitement une courbe ressemblante à un trèfle ? ou à un trèfle à quatres feuilles ?

uztop
Membre Complexe
Messages: 2396
Enregistré le: 12 Sep 2007, 11:00

par uztop » 22 Fév 2009, 00:04

Lemniscate a écrit:Le but de ce message n'était évidemment pas de faire un message à ta gloire uztop :) Mais c'est juste que ce type de construction m'a plu !


ah dommage :(
Plus sérieusement, je ne suis pas sur qu'on puisse trouver une formule pour passer du quadrillage de R au trèfle (topologiquement, ils sont différents puisque les lignes se croisent quand on passe de l'un à l'autre)

Lemniscate
Membre Relatif
Messages: 300
Enregistré le: 18 Jan 2009, 19:55

par Lemniscate » 22 Fév 2009, 00:10

uztop a écrit:topologiquement, ils sont différents puisque les lignes se croisent quand on passe de l'un à l'autre


Effectivement je n'avais pas vu cela, mais une bijection affine n'est pas nécessairement un homéomorphisme. Donc je ne comprends pas trop pourquoi on ne peut trouver une bijection affine...

Clembou
Membre Complexe
Messages: 2732
Enregistré le: 03 Aoû 2006, 11:00

par Clembou » 22 Fév 2009, 13:17

Tu as essayé avec une combinaison de plusieurs courbes ??? Tu peux tracer par exemple une lemniscate de Bernouilli (implicitplot avec with(plots)), deux fonctions affines et la courbe y=-... (à toi de trouver les ...). Ensuite pour la feuille du haut, il faut voir comment faire (une demi-lemniscate tournée ??).

Lemniscate
Membre Relatif
Messages: 300
Enregistré le: 18 Jan 2009, 19:55

par Lemniscate » 22 Fév 2009, 13:33

Clembou a écrit:Tu as essayé avec une combinaison de plusieurs courbes ??? Tu peux tracer par exemple une lemniscate de Bernouilli (implicitplot avec with(plots)), deux fonctions affines et la courbe y=-... (à toi de trouver les ...). Ensuite pour la feuille du haut, il faut voir comment faire (une demi-lemniscate tournée ??).


Merci je vais essayer cela.

On ne manquera pas de noter qu'involontairement mon pseudo apparaît maintenant dans la discussion initialement déclenchée (involontairement également) par uztop ! :)

Bye !

emdro
Membre Complexe
Messages: 2351
Enregistré le: 11 Avr 2007, 16:37

par emdro » 22 Fév 2009, 14:08

Bonjour,

tu ne peux pas affecter une valeur à une liste de plus de 100 éléments avec maple en utilisant par exemple: L[103]:=X
Il y a une autre solution qui est subsop(103=X,L).

emdro
Membre Complexe
Messages: 2351
Enregistré le: 11 Avr 2007, 16:37

par emdro » 22 Fév 2009, 14:37

Cette procédure a l'air de fonctionner:

trefle1:=proc(n::even)
>
> global L,L2,L56,L34;
> local m,P,C,i,j,k,t;
>
> m:=n;
> L2:=[];
> L:=[[0,0]];
> L56:=[];
> L34:=[];
> C:=[[0,0],[m,m],[m,0],[0,m],[m,m],[0,0]];
> for i from 1 to (m/2) do L:=[op(L),[0,i],[(m/2)+1-i,(m/2)+1-i],[0,i]];od;
> L2:=L;
> for j from 1 to (3*(m/2)+1) do L2:=subsop(j=[L2[j][1],m-L2[j][2]],L2);od;
>
> P:=[op(L),op(L2)];
> L56:=P;
>
> for k from 1 to 6*(m/2)+2 do L56:=subsop(k=[m-L56[k][1],L56[k][2]],L56);od;
>
> L34:=P;
>
> for t from 1 to 6*(m/2) do L34:=subsop(t=[m-P[t][2],m-P[t][1]],L34);od;
>
> L:=[op(C),op(L),op(L2),[0,m/2],[0,0],[m,0],op(L56),[m,m],op(L34)];
>
> C;plot(L,scaling=constrained);
> end:

Lemniscate
Membre Relatif
Messages: 300
Enregistré le: 18 Jan 2009, 19:55

par Lemniscate » 22 Fév 2009, 15:23

Merci beaucoup emdro, en effet cette modification marche ! (jusqu'à n=1000 en tout cas).

Je ne comprends pas vraiment pourquoi subsop est préféré par Maple à l'autre écriture mais bon, ca marche !

Je crois juste que tu a mis un "C;" en trop mais bon c'est un détail !

> C;plot(L,scaling=constrained);


Merci encore.

NB : Pour info voilà ce qu'on obtient pour n=750 :
Image

et en vert :
Image

NB2 : J'ai utilisé pour cela :
plot(L,scaling=constrained,color=COLOR(RGB, rand()/10^12, rand()/10^12, rand()/10^12));


En fait j'ai juste copier collé ce qu'il y avait dans l'aide Maple, car quand j'essayais manuellement de changer R G ou B entre 0 et 256 cela ne me donnait que très peu de couleurs (comme si je ne mettais que des 0 ou des 1).

EDIT : J'ai compris, en fait le RGB de Maple c'est du "RWX" (cf ce site). Donc si je met 0, 0.40, 0 ca me fait un vert crédible pour un trèfle :)

emdro
Membre Complexe
Messages: 2351
Enregistré le: 11 Avr 2007, 16:37

par emdro » 22 Fév 2009, 16:13

Effectivement, j'ai laissé un C absolument inutile, et tu verras que j'ai mis L, L2,L34 et L56 en global, ce qui n'a pas lieu d'être.

C'était en vue d'un débogage d'une procédure initiale vraiment fausse! :happy2:

Lemniscate
Membre Relatif
Messages: 300
Enregistré le: 18 Jan 2009, 19:55

par Lemniscate » 22 Fév 2009, 16:31

Bon alors j'ai essayé la méthode avec des lemniscates et voilà ce que ça donne :
;
(paramétrage cartésien d'une lemniscate, où a>0)

> with(plots):
> g1:=plot([(1/2)*sin(t)/(1+cos(t)^2), (1/2)*(sin(t)*cos(t))/(1+cos(t)^2), t=0..2*Pi],scaling=constrained,axes=none,thickness=2):
> g2:=plot([(1/2)*(sin(t)*cos(t))/(1+cos(t)^2), (1/2)*sin(t)/(1+cos(t)^2), t=0..Pi],scaling=constrained,axes=none,thickness=2):
> d1:=plot([t,2*t,t=-3/16..0],scaling=constrained,axes=none,thickness=2):
> d2:=plot([t,-2*t,t=0..3/16],scaling=constrained,axes=none,thickness=2):
> display([g1,g2,d1,d2]);


Et voilà le dessin :

Image

Personellement je préfère l'autre méthode :) Mais celle ci a le mérite d'être plus rapide.

Voici, à titre de comparaison de vrais trèfles :

Image
Image

Donc la méthode "uztop" (si je puis me permettre) est plus fidèle à la réalité.

Et un dessin un peu plus développé que le mien :
Image

Mais sans doute qu'en apportant quelques modifications à l'équation polaire ()de la lemniscate, on peut obtenir quelque chose de plus "réaliste".

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite