# Asymptote: Macros and Packages

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

## 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 {}. To define a function with no output simply put void before the function name. 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. Graph also has more advanced functions such as the ability to Graph a function

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.