我正在尝试在使用 Asymptote 的同时学习它。我尝试通过 Asymptote 的轴(网格)函数(或任何其他包,例如 graph.asy)重现下面显示的图像。我无法理解手册的相应部分,也无法在 Charles Staat 教程中找到任何相关内容。此外,我找不到任何相关示例。
我终于创建了图表手动,使用以下内联代码。 我怎样才能复制具有预先存在的渐近线函数的图形?
\begin{asy}
size(3.3cm,3.3cm);
defaultpen(fontsize(9pt));
for (int i = -12; i <= 12; ++i) {
draw((i/2,-2pi) -- (i/2, 2pi), palegrey);
if (i %2 == 0) { draw((i/2,-2pi) -- (i/2, 2pi), grey); }
if (i %4 == 0) { label(string(i/2,2), (i/2, -2pi), S, fontsize(8pt)); }
}
for (int i = -2; i <= 2; ++i) {
draw((-2pi,i*pi) -- (2pi,i*pi), grey);
if (i == 0)
{ label("$0$", (-2pi, 0), W, fontsize(8pt)); }
else
{ label(string(i,2) + "pi", (-2pi, i*pi), W, fontsize(8pt)); }
}
\end{asy}
答案1
这里我提出两种解决方案。第一种我定义了一个函数,它给出了标签字符串(y 轴为 pi,x 轴为偶数)。
size(8cm,0);
import graph;
import graph_pi;
xlimits( -6, 6);
ylimits( -2pi, 2pi);
string ylab(real x)
{
string s;
s="$"+string(round(x/pi))+"\pi$";
if (abs(x)<epsilon) {s="0";}
if (round(x/pi)==1) {s="$\pi$";}
if (round(x/pi)==-1) {s="$-\pi$";}
return s;
}
string xlab(real x)
{
string s;
s=string(x);
if (round(x)%2==1) {s="";}
return s;
}
yaxis( LeftRight(), RightTicks(new string(real x) { return ylab(x);},Step=pi,pTick=black, ptick=lightgrey, extend=true));
xaxis( BottomTop(), Ticks(new string (real x) {return xlab(x);}, Step=1, step=.5, pTick=black, ptick=lightgrey, extend=true));
在第二个解决方案中,我使用base_pi.asy
非官方graph_pi.asy
软件包。它提供了grid
例程和一个labelfrac
例程来获得分数类型的标签。您可以在此处找到它http://www.piprime.fr/asymptote/unofficial-asymptote-packages/
size(8cm,0);
import graph;
import graph_pi;
xlimits( -6, 6);
ylimits( -2pi, 2pi);
grid(xStep=1, xstep=1/2,
yStep=pi, ystep=pi,
pTick=.7bp+black,
ptick=.7bp+.7white,
above=false
);
yaxis( LeftRight, RightTicks(labelfrac(
factor=pi,
symbol="\pi",
symbolin=true,
zero=true),
Step=pi,pTick=black, ptick=lightgrey));
xaxis( BottomTop, LeftTicks(Label("$%.2f$"), Step=2, step=1/2, ptick=lightgrey));
结果