Reunion et intersection d'ensemble

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

Reunion et intersection d'ensemble

Message  Joffrey le Jeu 9 Oct - 20:28

Salut,

Je me suis préparé un schéma sur les ensembles et je me suis heurté a un problème avec ellipseArc
J'ai défini, les points d'intersections de mes deux ellipses et je voulais colorer et hachurer l'intérieur avec une troisième couleur. Le problème : une ligne se formait entre mes deux points de l'ellipse; j'ai donc été obligé de ruser et de dessiner deux fois mes arcs d'ellipse.

Tout ça pour demander s'il n'existait pas une petite macro qui gère l'intersection et la réunion de deux (trois ou plus...) ensembles ?

Voici quand même ce que j'ai obtenu :


Avec le code, à insérer dans une fenêtre utilisateur :
Code:

[
Width:=8,
Color:=orange, FillStyle:=fdiag, FillColor:=orange,
ellipse(0,2.5,1,-30),
Seg(2.5*exp(150*i*pi/180), 3.5*exp(150*i*pi/180)),
LabelDot(3.5*exp(150*i*pi/180),"$\text{A}$","NO"),
Color:=forestgreen, FillStyle:=bdiag, FillColor:=forestgreen,
ellipse(0.5+0.5*i,2.25,1,60),
Seg(2.25*exp(-2*i*pi/3)+0.5+0.5*i, 3.25*exp(-2*i*pi/3)+0.5+0.5*i),
LabelDot(3.25*exp(-2*i*pi/3)+0.5+0.5*i,"$\text{B}$","SO"),

L:=Get(ellipse(0,2.5,1,-30)) InterL Get(ellipse(0.5+0.5*i,2.25,1,60)),

Color:=gray, FillStyle:=diagcross, FillColor:=gray,
LineStyle:=noline,
Path([L[1],L[2],L[3],L[4],line],1),
ellipseArc(L[1],0,L[2],2.5,1,1,-30),
ellipseArc(L[3],0,L[4],2.5,1,1,-30),
ellipseArc(L[4],0.5+0.5*i,L[1],2.25,1,1,60),
ellipseArc(L[2],0.5+0.5*i,L[3],2.25,1,1,60),

FillStyle:=none, FillColor:=gray, LineStyle:=solid,
ellipseArc(L[1],0,L[2],2.5,1,1,-30),
ellipseArc(L[3],0,L[4],2.5,1,1,-30),
ellipseArc(L[4],0.5+0.5*i,L[1],2.25,1,1,60),
ellipseArc(L[2],0.5+0.5*i,L[3],2.25,1,1,60),

Seg(L[1],L[1]+1),
LabelDot(L[1]+1,"$\text{A}\cap\text{B}$","E")
]

Deuxième chose, comme je ne compte pas ouvrir un nouveau fil, je pose toute mes question :
est-il possible d'adapter la macro markseg à l'espace ?

Bonne soirée

Joffrey

Joffrey

Nombre de messages : 179
Age : 35
Localisation : Vichy(03) / Clermont-Ferrand(63)
Date d'inscription : 13/06/2008

Voir le profil de l'utilisateur http://mathex.servhome.org

Revenir en haut Aller en bas

Re: Reunion et intersection d'ensemble

Message  P.Fradin le Jeu 9 Oct - 21:33

Bonsoir Joffrey,

Si tu utilises la dernière version test 1.94, tu as les macros cap et cup qui sont prédéfinies, leur syntaxe est: cap( contour1, contour2) et cup( contour1, contour2), elles renvoient le contour de l'intersection et de la réunion. Dans ton exemple cela donne:

Code:

[
Width:=8,
Color:=orange, FillStyle:=fdiag, FillColor:=orange,
ellipse(0,2.5,1,-30),
Seg(2.5*exp(150*i*pi/180), 3.5*exp(150*i*pi/180)),
LabelDot(3.5*exp(150*i*pi/180),"$\text{A}$","NO"),
Color:=forestgreen, FillStyle:=bdiag, FillColor:=forestgreen,
ellipse(0.5+0.5*i,2.25,1,60),
Seg(2.25*exp(-2*i*pi/3)+0.5+0.5*i, 3.25*exp(-2*i*pi/3)+0.5+0.5*i),
LabelDot(3.25*exp(-2*i*pi/3)+0.5+0.5*i,"$\text{B}$","SO"),
{calcul des contours}
L1:=Get(ellipse(0,2.5,1,-30)), L2:=Get(ellipse(0.5+0.5*i,2.25,1,60)),
FillStyle:=diagcross, FillColor:=gray, Color:=gray,
{calcul et dessin de l'intersection}
Ligne( cap(L1,L2), 1),
A:= Copy(L1 InterL L2,1,1),Seg(A,A+1), LabelDot(A+1,"$\text{A}\cap\text{B}$","E")
]

C'est plus simple que ta méthode mais par contre on perd l'aspect vectoriel car le contour renvoyé par cap et cup ne sont plus des courbes de Bézier mais des listes de points (ce qui se voit si on zoom fortement).

Pour dessiner des ensembles j'avais proposé un exemple mais pas dans se forum, voici la macro:
set("nom", centre, [options]) avec les options:
scale:= facteur d'échelle (1 par défaut)
angle:= inclinaison en degrés (0 par defaut)
label:= 0/1 (affichage du nom, 1 par défaut)

Code:

{ set(nom, centre, [options])
options:
        scale:= facteur d'échelle (1 par défaut)
        angle:= inclinaison en degrés (0 par defaut)
        label:= 0/1 (affichage du nom, 1 par défaut)
}
[$scale:=1, $angle:=0, $label:=1,
{$a:=i, $d:=0.75-i/4, $c:=-i, $b:=-0.75-i/4, $v:=-1.25,}
$a:=4*i, $b:=-3-i/2, $d:=-bar(b), $c:=-a,  $v:=-5,
SaveAttr(),
$x:=Eval(String(%3)),
M:=matrix(exp(i*angle*deg)*scale*z+%2),
ComposeMatrix(M),
Spline(v,a,b,c,d,a,v),
mtransform(Get(Spline(v,a,b,c,d,a,v),0),GetMatrix()), {on renvoie la liste des points}
if label then
  LabelStyle:=0,
  Label(a+0.45*i/Abs(i), ["$",%1,"$"]),
fi,
RestoreAttr()
]

cette macro fait le dessin de l'ensemble et renvoit en même temps la liste des points du contour, par exemple, dans un élément Utilisateur:

Code:

[
background(full,beige),Width:=8,
{définition et dessin des ensembles}
A:=set("A",0,[scale:=0.75]),
B:=set("B",1.5-i,[angle:=-30]),
C:=set("C",-1-i*1.5,[scale:=0.75,angle:=40]),
D:=set("D",2-3*i,[angle:=-135]),

FillOpacity:=0.6, Color:=red, FillColor:=Rgb(0.74,0.71,1), FillStyle:=full, Width:=16,

{calcul et dessin de la réunion}
 Ligne( cup(D,cup(A,cup(C,B))), 1),

{pour la légende}
Drectangle(M(-7,6),M(-6,6),M(-6,7)),

Color:=blue,FillColor:=Rgb(0.74,1,0.71),

{calcul et dessin de (C cap D) cup (A cap B)}
Ligne( cup(cap(C,D),cap(A,B)), 1),

{pour la légende}
Drectangle(M(-7,4),M(-6,4),M(-6,5)),

{Labels de la légende}
Color:=black, LabelStyle:=left,
Label(M(-5.75,6.5),"$A\cup B \cup C\cup D$"),
Label(M(-5.75,4.5),"$(A\cap B) \cup (C\cap D)$")
]

donnera:

_________________
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: Reunion et intersection d'ensemble

Message  P.Fradin le Ven 10 Oct - 0:43

Pour l'autre question, tu pourrais ouvrir un fil dans la rubrique Macros/Propositions?

_________________
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: Reunion et intersection d'ensemble

Message  Contenu sponsorisé Aujourd'hui à 11:52


Contenu sponsorisé


Revenir en haut Aller en bas

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

- Sujets similaires

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