Reunion et intersection d'ensemble
2 participants
Page 1 sur 1
Reunion et intersection d'ensemble
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 :
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
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
Re: Reunion et intersection d'ensemble
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:
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)
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:
donnera:
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:
Re: Reunion et intersection d'ensemble
Pour l'autre question, tu pourrais ouvrir un fil dans la rubrique Macros/Propositions?
Sujets similaires
» Intersection
» Intersection plan-cylindre
» Nommer points d'intersection
» Intersection d'une courbe et d'une horizontale.
» Intersection plan-cylindre
» Nommer points d'intersection
» Intersection d'une courbe et d'une horizontale.
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum