如何在 Asymptote 中编写函数

如何在 Asymptote 中编写函数

我有一个在平面上绘制几个环的代码,我希望能够定义一个函数,以半径、中心和颜色作为参数,以便能够绘制大量环而无需重复代码。这在 Asymptote 中可以实现吗?

代码如下:

settings.outformat = "png";
settings.render=16;
size(345.0pt,0);
import graph3;
currentprojection = perspective(30*dir(0,90));
real r1=5, r2=3, r0=0.1;
int nu = 36, nv = 36;

pen colorFunctionred(int u, real theta) {
    real z = sin(u/nu * 2pi);
    real t = (z + 1) / 2;
    return t*red + (1-t)*lightblue;
}
pen colorFunctiongreen(int u, real theta) {
    real z = sin(u/nu * 2pi);
    real t = (z + 1) / 2;
    return t*green + (1-t)*lightblue;
}

path3 crossSection = Circle(r=r0, c=(r1,0,0), normal=Y, n= nu);
path3 crossSection2 = Circle(r=r0, c=(r2,0,0), normal=Y, n= nu);

surface torus = surface(crossSection, c=(0,0,0), axis=Z, n=nv,
    angle1=0, angle2=360, color=colorFunctionred);
surface torus2 = surface(crossSection2, c=(1,0,1), axis=Z, n=nv,
    angle1=0, angle2=360, color=colorFunctiongreen);

draw(torus);
draw(torus2);

并产生

飞机上的环

答案1

functions在渐近线手册索引中查找该单词以找到一些简单示例。这里有一个drawcircle绘制圆圈的简单函数。请注意,可以定义默认参数。在示例中,如果未定义笔,则使用黑色。

unitsize(1cm);

void drawcircle(pair center, real radius, pen p = black)
{
    draw(shift(center)*scale(radius)*unitcircle, p);
}

drawcircle((0,0), 1, 3+red);
drawcircle((1,1), 1, blue);
drawcircle((0.5,0.5), 0.5);

在此处输入图片描述

相关内容