ฉันจะวาดระหว่าง 2 ภาพขึ้นไปใน Asymptote ได้อย่างไร?
ตัวอย่าง:
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)));
เอาท์พุต:

นี่คือสิ่งที่ฉันต้องการ:

ฉันสามารถวาดเส้นประเชื่อมต่อสองจุดจากpic1
ไปpic2
, pic2
เพื่อpic3
... ?
คำตอบ
บางทีอาจจะสะดวกกว่าในการติดตามและใช้transform
เช่นนี้
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);
}

จากคำถามและความคิดเห็นของคุณคุณต้องการลากเส้นระหว่างสองพิกัดบนรูปภาพสองรูปที่แตกต่างกันโดยอ้างอิงรูปภาพ ฉันไม่รู้วิธีโดยตรงในการทำสิ่งนี้ แต่สิ่งต่อไปนี้อาจจะเหมาะกับความต้องการของคุณ
ฉันกำหนดออฟเซ็ตของ pic2 เป็นคู่ จากนั้นคุณอาจใช้คู่นี้เพื่อหักล้างจุดสิ้นสุดของเส้นประ
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)));
จำไว้ว่างานนี้ง่ายมากในการวาดด้วย TikZ ทั้งสำหรับจุดหรือnode
s รวมถึงanchor
คะแนนทั้งหมด ในกรณีที่พวกเขาอยู่ในส่วนต่างๆของภาพปัจจุบันที่มีแตกต่างกันscope
เพียงแค่ให้โหนดเหล่านี้ชื่อบางส่วนพูดและ(A)
(B)
จากนั้นเราสามารถใช้\draw (A)--(B);
หรือ\draw (A.120)--(B.center);
สำหรับ Asymptote คำตอบของ @ g.kov ใช้ได้กับจุด ( pair
) ในรูปภาพต่างกัน ต่อไปนี้คือการทดสอบจุดขอบเขตของobject
s ที่แตกต่างกัน ไวยากรณ์point(B,dir(45),t)
ให้เราpair
ไปในทิศทางที่45
เกี่ยวกับเขตแดนของภายใต้การกระทำของแปลงobject
B
t
หลายอย่างได้ผลตามที่คาดหวัง อย่างไรก็ตามเราจำเป็นต้องทดสอบเพิ่มเติมเช่น
unitsize(1cm)
ไม่ทำงานฉันต้องระบุหน่วยในแต่ละคำสั่งfill(circle(Y,2pt),red);
// ไม่เห็นอะไรเลยdot(Y);
// ไม่ทำงาน4.
วาดผิดตำแหน่ง(X .. ควบคุม X + dir (45) และ Y + dir (-50) .. Y, แดง, Arrow); // ให้บรรทัดตรง `รหัส

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