import graph; path p=(10,75)..(15,85)..(20,90)..(35,85)..(40,79)--(78,30)..(85,15)..(87,5); pair l=point(p,3.5); pair m=point(p,4.5); pair s=point(p,4.9); pen c=linewidth(1.5); pair o=(m.x,0.5(m.x+l.y)); pen d=c+darkgreen; void drawarrow(string s="", pair p, pair q, side side=RightSide, bool upscale=false, pen c) { path g=p{dir(-5)}..{dir(-85)}q; if(upscale) g=reverse(g); draw(s,g,side,c,Arrow(Fill,0.65)); } void spectrum(pair l,pair m, pair s) { draw(p,c); d += 4.0; dot("$p$",l,SW,d); dot("$q$",m,SW,d); dot("$k$",s,SW,d); xaxis("$k$",0); yaxis("$E(k)$",0); } drawarrow("$T_p$",l,m,true,blue); drawarrow("$T_k$",m,s,LeftSide,red); spectrum(l,m,s); shipout("triadpqk"); erase(); drawarrow("$-T_p$",l,m,LeftSide,red); drawarrow("$-T_q$",m,s,true,blue); spectrum(l,s,m); shipout("triadpkq"); erase(); drawarrow("$T_k$",l,m,true,blue); drawarrow("$T_q$",m,s,LeftSide,red); spectrum(m,s,l); shipout("triadkpq");