path p2 = (-89,2)..controls(-86.8188470497,44.0983279574)and(-45.9938314745,72.3882023306)..(-2,69) ..controls(37.3564255309,65.9689493222)and(71.1986829486,38.501250568)..(76,0) ..controls(81.6314985122,-45.1583873691)and(46.3165401516,-84.2754685726)..(0,-92) ..controls(-60.1996040054,-102.039906511)and(-116.438157081,-59.1028090769)..(-116,0) ..controls(-115.569614418,58.0545150815)and(-60.8290914438,99.2504221041)..(0,97) ..controls(56.1281494698,94.923493098)and(100.064478245,53.1265690797)..(102,0) ..controls(107.052588053,-138.684397375)and(-95.2410532598,-118.458268134)..cycle; import fontsize; defaultpen(linewidth(1.5)); // XeLaTeX 设置 usepackage("xeCJK"); texpreamble("\input{fzfonts.tex}"); // pdfTeX 设置 // usepackage("ctexutf8"); // texpreamble("\pdfpkresolution2400"); // 如果使用 pk 字体,用较高精度。 picture windpic(int windnum, path p ... int[] patition) { picture pic; dot(pic, (0,0), linewidth(4pt)); label(pic, "\LARGE$\hbox{卷绕数}="+string(windnum)+"$", (0,0), 3S); patition.insert(0,0); int n = patition.length; for (int i = 0; i < n-1; ++i) draw(pic, subpath(p, patition[i], patition[i+1]), heavyred, Arrow(TeXHead)); draw(pic, subpath(p, patition[n-1], length(p)), heavyred); return pic; } add(currentpicture, windpic(-2, p2, 2, 6).fit(), (0,0), 10W); add(currentpicture, windpic(-1, scale(100)*(N..E..S..W..cycle), 1).fit(), (0,0), 10E); add(currentpicture, windpic(0, shift(80,0)*scale(50)*(N..E..S..W..cycle), 1).fit(), (200,0), 40E); add(currentpicture, windpic(1, scale(100)*(S..E..N..W..cycle), 1).fit(), (450,0), 20E); add(currentpicture, windpic(2, reverse(p2), 1, 5).fit(), (700,0), 10E); add(bbox(xmargin=10,ymargin=0,p=invisible));