मैं Asymptote में 2 चित्रों या अधिक के बीच कैसे आकर्षित कर सकता हूं?
उदाहरण:
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)));
याद रखें कि यह कार्य टीकज के साथ ड्राइंग में बहुत आसान है, दोनों बिंदुओं के लिए या node
उनके सभी anchor
बिंदुओं सहित । यदि वे वर्तमान चित्र के विभिन्न भागों में हैं, अर्थात् अलग-अलग हैं scope
, तो बस इन नोड्स को कुछ नाम दें, कहें (A)
और (B)
। तब हम \draw (A)--(B);
या उपयोग कर सकते हैं\draw (A.120)--(B.center);
Asymptote के लिए, @ g.kov का उत्तर pair
विभिन्न चित्रों में बिंदुओं ( ) के लिए काम करता है । निम्नलिखित विभिन्न object
एस के सीमा बिंदुओं के लिए मेरा परीक्षण है । सिंटैक्स point(B,dir(45),t)
हमें परिवर्तन की कार्रवाई के तहत, सीमा पर pair
दिशा में एक देता है । कई चीजें उम्मीद के मुताबिक काम करती हैं। हालाँकि हमें अधिक परीक्षण करने की आवश्यकता है, जैसे,45
object
B
t
unitsize(1cm)
काम नहीं करता है, मुझे प्रत्येक कमांड में इकाइयों को निर्दिष्ट करना होगा;fill(circle(Y,2pt),red);
// कुछ भी नहीं देखाdot(Y);
// काम नहीं किया, गलत स्थिति4.
ड्रा (एक्स .. एक्स + डायर (45) और वाई + डायर (-50) को नियंत्रित करता है .. वाई, रेड, एरो); // एक कड़ी लाइन दे `कोड
//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));