Asymptote'da 2 veya daha fazla resim arasında nasıl çizim yapabilirim?
Misal:
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)));
Çıktı:

İhtiyacım olan şey bu:

Ben gelen hat bağlantı iki nokta kesik çizebilirsiniz pic1
için pic2
, pic2
için pic3
, ...?
Yanıtlar
Belki de şu şekilde izlemek ve kullanmak daha uygun olacaktır transform
, örneğin:
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);
}

Sorunuza ve yorumunuza göre, resimleri referans alarak iki farklı resim üzerinde iki koordinat arasına bir çizgi çekmek istiyorsunuz. Bunu yapmanın doğrudan bir yolunu bilmiyorum, ancak belki aşağıdakiler ihtiyaçlarınızı karşılayabilir.
Pic2 ofsetini bir çift olarak tanımlıyorum. Daha sonra bu çifti kesikli çizgi uç noktasını kaydırmak için de kullanabilirsiniz.
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)));
Bu görevin TikZ ile çizim yapmanın hem puanlar hem node
de tüm anchor
noktaları dahil olmak üzere çok kolay olduğunu hatırlayın . Mevcut resmin farklı bölümlerinde olmaları, yani farklı olmaları durumunda scope
, bu düğümlere bazı isimler verin, örneğin (A)
ve (B)
. O zaman kullanabiliriz \draw (A)--(B);
veya\draw (A.120)--(B.center);
Asymptote için, @ g.kov cevabı pair
farklı resimlerdeki noktalar ( ) için işe yarar . Aşağıdaki, farklı ebatların sınır noktaları için testimdir object
. Sözdizimi point(B,dir(45),t)
bize dönüşümün eylemi altında , sınırındaki pair
yönde bir verir . Pek çok şey beklendiği gibi çalışıyor. Ancak daha fazlasını test etmemiz gerekiyor, örneğin45
object
B
t
unitsize(1cm)
çalışmıyor, her komutta birimleri belirtmem gerekiyor;fill(circle(Y,2pt),red);
// bir şey gördün müdot(Y);
// çalışmadı, yanlış pozisyon4.
çizimi (X .. kontrol X + dir (45) ve Y + dir (-50) .. Y, kırmızı, Ok); // düz bir satır verin `Kod

//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));