Bagaimana cara menggambar antara 2 gambar atau lebih di Asymptote?
Contoh:
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)));
Keluaran:

Inilah yang saya butuhkan:

Dapatkah saya menggambar garis putus-putus menghubungkan dua titik dari pic1
ke pic2
, pic2
ke pic3
, ...?
Jawaban
Mungkin, akan lebih nyaman untuk melacak dan menggunakan transform
, seperti ini, misalnya:
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);
}

Berdasarkan pertanyaan dan komentar Anda, Anda ingin membuat garis di antara dua koordinat pada dua gambar berbeda dengan merujuk gambar tersebut. Saya tidak tahu cara langsung untuk melakukan ini, tetapi mungkin yang berikut ini akan sesuai dengan kebutuhan Anda.
Saya mendefinisikan offset pic2 sebagai pasangan. Kemudian Anda dapat menggunakan pasangan ini untuk juga mengimbangi titik akhir garis putus-putus.
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)));
Ingatlah bahwa tugas ini sangat mudah dalam menggambar dengan TikZ, baik untuk poin atau node
termasuk semua anchor
poinnya. Jika mereka berada di bagian yang berbeda dari gambar saat ini, yaitu, di tempat yang berbeda scope
, berikan beberapa nama pada simpul ini, katakan (A)
dan (B)
. Lalu kita bisa menggunakan \draw (A)--(B);
atau\draw (A.120)--(B.center);
Untuk Asymptote, jawaban dari @ g.kov berfungsi untuk poin ( pair
) dalam gambar yang berbeda. Berikut ini adalah tes saya untuk titik batas object
s yang berbeda . Sintaksnya point(B,dir(45),t)
memberi kita pair
arah 45
pada batas object
B
, di bawah aksi transformasi t
. Banyak hal berjalan sesuai harapan. Namun kami perlu menguji lebih banyak, misalnya,
unitsize(1cm)
tidak berfungsi, saya harus menentukan unit di setiap perintah;fill(circle(Y,2pt),red);
// memang melihat sesuatudot(Y);
// tidak bekerja, salah posisi4.
menggambar (X .. mengontrol X + dir (45) dan Y + dir (-50) .. Y, merah, Panah); // beri garis lurus `Kode

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