# Point, vector, helper functions.

ZenCad has some math helpers and functions for working with them.

## Point

Some ZenCad functions use points or point arrays as parameters. You can use the `point3`

function to create a point object. In addition, often a function can itself form points from a list or a tuple of coordinates.

```
point3(0,3,6)
#Equivalent calls
interpolate([point3(0,0,0), point3(0,0,10), point3(10,0,10)])
interpolate([(0,0,0), (0,0,10), (10,0,10)])
interpolate(points([(0,0,0), (0,0,10), (10,0,10)]))
```

A point can be displayed with the display function as the corresponding vertex for such a point.

## Vector

Sometimes, in addition to specifying points, vector objects are used to indicate directions. The principle of working with vectors is similar to working with points.

```
vector3(1,2,3)
interpolate(pnts=[(0,0,0), (0,0,10), (10,0,10)], tangs=[(0,0,1), (1,0,0), (0,1,0)])
```

The vector cannot be displayed directly. Unlike a point, a vector ignores translation during transformations.

## Point and vector arrays

The vectors and points functions explicitly create arrays of points from arrays of coordinates. points2 creates a two-dimensional array of points from a two-dimensional list.

```
points([(0,0,0), (0,0,10), (10,0,10)])
vectors([(0,0,1), (1,0,0), (0,1,0)])
points2([
[(0,0,0), (0,0,10), (10,0,10)],
[(1,6,0), (0,5,10), (10,5,10)]
])
```

## Incremental array of points

Creates an array of points based on offsets.

```
points_incremental([(0,2,0), (0,0,10), (5,0,0), (5,0,0)])
# Создаёт масив точек:
# (0,2,0)
# (0,2,10)
# (5,2,10)
# (10,2,10)
```

## Operations on points and vectors

Points and vectors can be used in mathematical operations according to the rules of linear algebra.

```
pnt - pnt -> vec
pnt + vec -> pnt
vec + vec -> vec
vec - vec -> vec
```

## Empty primitive. nullshape

Empty primitive. Can participate in boolean operations.

An example of use in a loop:

```
it = nullshape()
for i in range(7):
it = it + box(20).translate(10*i,10*i,10*i)
#alternate: union([box(20).translate(10*i,10*i,10*i) for i in range(7)])
```

## Conversion of angular values. Radians and degrees

The zencad API uses radians to define angles. Using degrees requires scaling a numerical factor. This is exactly what the deg function does (synonymous with deg2rad):
`deg (180)`

matches `math.pi`

.

The reverse conversion is performed by the rad2deg function.

Сигнатуры:

```
# Convert degrees to radians:
def deg2rad(grad)
def deg(grad)
# Convert radians to degrees:
def rad2deg(rad)
```

Function code deg2rad, rad2deg:

```
def deg2rad(grad):
return float(grad) / 180.0 * math.pi
def rad2deg(rad):
return float(rad) * 180.0 / math.pi
```

Example:

```
rotateZ(deg(45))
```

### Register font

Register FreeType font in system.

```
register_font(fontpath)
```