###### meta data for this page

## Math Guide

## Orientation

All the internal calculations of JSCAD (and other included libraries) are based on the 'right-hand' rule. (For more information see discussions here and here.)

This results in the following orientation of the three-dimensional coordinate system, i.e. orientation of X, Y, and Z axis.

- Positive X points to the right
- Positive Y points to the back
- Positive Z points to the top

This also means that positive rotations are

- From positive X to positive Y about the Z axis
- From positive Y to positive Z about the X axis
- From positive Z to positive X about the Y axis

It may take some time to understand well, and can be visualized by rotating shapes by both positive and negative angles.

## Conversions

### Conversions between Degrees and Radians

Convert the given angle (degrees) to radians.

const { degToRad } = require('@jscad/modeling').utils let radians = degToRad(90) // PI / 2 radians

Convert the given angle (radians) to degrees.

const { radToDeg } = require('@jscad/modeling').utils let degrees = radToDeg(Math.PI / 2) // 90 degrees

### Conversions of Radius to Segments

Calculate the number of segments to complete the given radius (full rotation), using either minimum length or minimum angle.

There are various round shapes that support the 'segments' option. However, designs may require a specific 'precision' for specific shapes. For example, an arc as part of a path requires specific length segments for proper laser cutting.

This function can be used to calculate the appropriate number of segments based on the radius of the rounded shape.

Using the above example, the arc has a radius of 3.5 mm (units are typically mm). The laser printer requires 0.1 mm segments or more while moving. The segments can be calculated, and supplied when creating the arc.

const { radiusToSegments } = require('@jscad/modeling').utils let segments = radiusToSegments(3.5, 0.1, 0) /* use minimum length */ let segments = radiusToSegments(3.5, 0, Math.PI * 2 / 300) /* use minimum angle */

*NOTE: The number of segments can become large depending on the 'precision' requirements. Testing designs with a lower number of segments is recommended.*