# math: Difference between revisions

## math() Function

Introduced in version 1.4.0.5
This is NOT a single MapTool function but a collection of math functions in MapTool.

Important Note: Some of these functions have similar versions that don't have the `math.` prefix. These functions may differ slightly from those in implementation and output. For instance, most of these functions return a floating-point number (e.g.: `3.0`), so you may find it helpful to surround them with round(), floor(), or ceiling().

### Usage

```Numbers:
[r:val = math.pi()]
[r:val = math.e()]

Trigonomotry:
[r:val = math.acos(degrees)]
[r:val = math.asin(degrees)]
[r:val = math.atan(degrees)]
[r:val = math.atan_r(num)] <!-- radians -->
[r:val = math.atan2(y,x)] <!-- degrees -->
[r:val = math.atan2_r(y,x)] <!-- radians -->
[r:val = math.cos(degrees)]
[r:val = math.cos_r(num)]
[r:val = math.sin(degrees)]
[r:val = math.sin_r(num)]
[r:val = math.tan(degrees)]
[r:val = math.tan_r(num)]
[r:val = math.toDegrees(num)]

Power and root:
[r:val = math.sqrt(num)]
[r:val = math.squareroot(num)]
[r:val = math.cbrt(num)]
[r:val = math.cuberoot(num)]
[r:val = math.pow(num1,num2)]

Logarithmic
[r:val = math.log(num)] (this is the log to base e)
[r:val = math.log10(num)]

Pythagorean:
[r:val = math.hypot(num1, num2)]
[r:val = math.hypotenuse(num1, num2)]

Simple operations
[r:val = math.abs(num)]
[r:val = math.ceil(num)]
[r:val = math.floor(num)]
[r:val = math.isEven(num)]
[r:val = math.isInt(num)]
[r:val = math.isOdd(num)]
[r:val = math.max(num1, num2, num2, etc.)]
[r:val = math.min(num1, num2, num2, etc.)]
[r:val = math.mod(dividend, divisor)]```

### Examples

#### abs

`[r:val =  math.abs(-3)]`

Returns: 3.0

#### atan2_r

```<!-- calculate angle from center of source to center of target -->
[H: x1 = getTokenX(1,sourceId) + getTokenWidth(sourceId)]
[H: y1 = getTokenY(1,sourceId) + getTokenWidth(sourceId)]
[H: x2 = getTokenX(1,targetId) + getTokenWidth(targetId)]
[H: y2 = getTokenY(1,targetId) + getTokenWidth(targetId)]

<!-- note: reversed y1 and y2 in formulas to represent inverted MapTool coordinate system on y-axis -->
[H, if(x1 == x2): direction = 90 * min(1,max(-1,y1-y2)); direction = math.atan2_r(y1-y2,x2-x1) / math.pi() * 180]
[H: facing = round(direction)]```

Output range from -179 to 180 degrees.

#### mod

Returns the result of the modulo operation between the two numbers, which represents the remainder after a division operation.

`[r: math.mod(14,6)]`

Returns 2

`[r: math.mod(10,5)]`

Returns 0

`[r: math.mod(-13,4)]`

Returns -1

#### pow

`[r:val =  math.pow(2,3)]`
Returns: 8.0

Some `math` functions are further documented on their own pages: