Difference between revisions of "Asymptote: Macros and Packages"

Definitions

You can define your own functions in Asymptote. As an example, let's say you wanted to make a function called newfunction that takes a pair $(a,b)$ and a real value $r$ as input, and returns the pair $(a+r,b+r)$. In addition, you want it to simply return the pair $(a,b)$ if no value of $r$ is specified, so you want $r$ to default to $0$. The code would be as follows:

``` pair newfunction(pair z, real r=0)
{
real a,b;
a=z.x;
b=z.y;
return (a+r,b+r);
}
```

Put this definition in an asymptote document and then test it using some command like

```draw(newfunction((20,30))--newfunction((20,30),30)--(0,0)--cycle);
```

See if it works!

Notice that the function must be declared a pair since it returns a pair, and each of the variables must be declared some data type too. The default value of $r$ was set to $0$ by $r=0$, and the actual function procedure goes in between {}. This is the general format for a function definition.

Packages

Asymptote comes with several packages that contain useful functions for various purposes. For example, the package graph.asy contains the function

``` Circle(pair p, real r, int n=400);
```

which is a more accurate circle (having 400 nodes by default) than the built-in circle command. To use this function and others in graph.asy, simply put the command

```import graph;
```

at the top of your Asymptote document.

You can create your own package by simply creating a new .asy file (say MyMacros.asy) with your own definitions in it, and saving it in the directory in which Asymptote is installed (C:\Program Files\Asymptote by default). Then import MyMacros; in your document, and you'll be set!

* These boolean functions test for equality within $10^{-5}$ ps points in order to avoid approximation errors.