Comment dessiner entre 2 images ou plus dans Asymptote ?
Exemple:
unitsize(1cm);
defaultpen(linewidth(1bp));
picture pic1,pic2,pic3,pic4;
path bigbox=box((0,0),(4,4));
draw(pic1,Label("Input image",Relative(0.25/2)),bigbox);
draw(pic1,box((1,2),(2,3)),linetype(new real[] {4,4}));
filldraw(pic2,shift(2*(-.5,.5))*bigbox,white);
filldraw(pic2,shift(-.5,.5)*bigbox,white);
filldraw(pic2,bigbox,white);
label(pic2,Label(minipage("\centering Convolution \\ (feature maps)",3cm),Relative(0.25/2)),bigbox);
path dashedbox=box(((1,2)+(2,3))/2,(2,3));
draw(pic2,dashedbox,linetype(new real[] {4,4}));
path box1=box((1,1),(3,3));
filldraw(pic3,shift(2*(-.5,.5))*box1,white);
filldraw(pic3,shift(-.5,.5)*box1,white);
filldraw(pic3,box1,white);
label(pic3,Label("Maxpooling",Relative(0.25/2),9*RightSide),box1);
path cir=circle((3.5,0.5),0.5);
for(int i=6; i>=0;--i){ filldraw(pic4,shift(i*(-.5,.5))*cir,white); }
label(pic4,Label(minipage("\centering Fully- \\ connected \\ layer)",3cm),Relative(0.75),12*RightSide),shift(3*(-.5,.5))*cir);
add(pic1);
add(shift(6,0)*pic2);
add(shift(11,0)*pic3);
add(shift(15,0)*pic4);
shipout(bbox(2mm,Fill(white)));
Production:

C'est de quoi j'ai besoin:

Puis-je tracer une ligne pointillée reliant deux points de pic1
à pic2
, pic2
à pic3
, ... ?
Réponses
Peut-être serait-il plus pratique de suivre et d'utiliser transform
, comme ceci, par exemple :
settings.outformat="pdf";
size(9cm);
picture pic;
guide gc=scale(sqrt(2),1)*unitcircle;
guide gc1=shift(-1/sqrt(2),0)*scale(1/sqrt(2))*unitcircle;
guide gc2=shift( 1/sqrt(2),0)*scale(1/sqrt(2))*unitcircle;
pair A=(-1/sqrt(2),0);
pair B=( 1/sqrt(2),0);
filldraw(pic,gc ,orange, darkblue+0.7bp);
filldraw(pic,gc1,lightred, red+ 0.7bp);
filldraw(pic,gc2,lightblue,blue+ 0.7bp);
transform[] tr={
identity(),
shift(3,2)*rotate(42),
shift(3,-2)*rotate(242)
};
for(var rel: tr) add(rel*pic);
draw(tr[0]*B--tr[2]*B,blue+0.7*bp);
draw(tr[1]*A--tr[2]*A,red+0.7*bp);
for(var rel: tr){
dot(rel*(A--B),UnFill);
label("$A$",rel*A,plain.NE);
label("$B$",rel*B,plain.NE);
}

Sur la base de votre question et de votre commentaire, vous souhaitez tracer une ligne entre deux coordonnées sur deux images différentes en référençant les images. Je ne connais pas de moyen direct de le faire, mais peut-être que ce qui suit répondra à vos besoins.
Je définis le décalage de pic2 comme une paire. Ensuite, vous pouvez utiliser cette paire pour également décaler l'extrémité de la ligne pointillée.
unitsize(1cm);
picture pic1,pic2;
draw(pic1,(0,0)--(3,3),Arrow);
dot(pic1,(1.5,1.5));
draw(pic2,(0,3)--(3,0),Arrow);
dot(pic2,(1.5,1.5));
pair pic2offset = (5,0);
add(pic1);
add(shift(pic2offset)*pic2);
draw((1.5,1.5)--pic2offset+(1.5,1.5),black+dashed);
shipout(bbox(2mm,Fill(white)));
Rappelons que cette tâche est très facile en dessin avec TikZ, aussi bien pour des points ou node
des s comprenant tous leurs anchor
points. S'ils se trouvent dans différentes parties de l'image actuelle, c'est-à-dire dans différents scope
, donnez simplement à ces nœuds des noms, disons (A)
et (B)
. Ensuite, nous pouvons utiliser \draw (A)--(B);
ou\draw (A.120)--(B.center);
Pour Asymptote, la réponse de @g.kov fonctionne pour les points ( pair
) dans différentes images. Voici mon test pour les points limites de différents object
s. La syntaxe point(B,dir(45),t)
nous donne un pair
dans le sens 45
sur la frontière de object
B
, sous l'action de la transformée t
. Beaucoup de choses fonctionnent comme prévu. Cependant, nous devons tester davantage, par exemple,
unitsize(1cm)
ne fonctionne pas, je dois spécifier des unités dans chaque commande ;fill(circle(Y,2pt),red);
// n'a rien vudot(Y);
// n'a pas fonctionné, mauvaise position4.
draw(X .. contrôle X+dir(45) et Y+dir(-50) .. Y,red,Arrow); //donne une ligne droite ` Le code

//unitsize(1cm); // did not work, quite annoying
filldraw(circle((0,0),2.5cm),lightgray);
object A=draw("$A$",box,(-1cm,-1cm),xmargin=5mm,FillDraw(yellow,blue));
pair X=point(A,dir(120));
dot(X);
transform t=shift(4cm,-1cm);
picture pic;
filldraw(pic,box((0,0),(3cm,3.5cm)),pink);
object B=draw(pic,"$B$",ellipse,(2cm,2.5cm),xmargin=3mm,FillDraw(white,blue));
pair Y=point(B,dir(45),t);
fill(circle(Y,2pt),red); // did not work
dot(Y); // did not work
add(t*pic);
draw(X {N} .. {S}Y,red,Arrow);
draw(X --Y,Arrow(TeXHead));
//draw(X .. controls X+dir(45) and Y+dir(-50) .. Y,red,Arrow); // <<< did not work! I don't know why
shipout(bbox(5mm,invisible));