AngleJoint constraining the relative angles of two Bodies.

The equation for this constraint is:

```jointMin <= ratio * body2.rotation - body1.rotation <= jointMax
```

### `@:value({ ratio : 1.0 })new(body1:Null<Body>, body2:Null<Body>, jointMin:Float, jointMax:Float, ratio:Float = 1.0)`

Construct a new AngleJoint.

Parameters:

`body1` The first body in AngleJoint. The second body in AngleJoint. The lower bound for constraint. The upper bound for constraint. The ratio of joint (default 1)

Returns:

The constructed AngleJoint.

### `body1:Null<Body>`

First Body in constraint.

This value may be null, but trying to simulate the constraint whilst this body is null will result in an error.

### `body2:Null<Body>`

Second Body in constraint.

This value may be null, but trying to simulate the constraint whilst this body is null will result in an error.

### `jointMax:Float`

Upper bound for constraint.

This value must be greater than or equal to jointMin.

### `jointMin:Float`

Lower bound for constraint.

This value must be less than or equal to jointMax.

### `ratio:Float`

Ratio property of constraint.

@private

### `bodyImpulse(body:Body):Vec3`

@inheritDoc

For this constraint, only the z coordinate will be non-zero.

### `impulse():MatMN`

@inheritDoc

For this constraint, the MatMN will be 1x1.

### `inlineisSlack():Bool`

Determine if constraint is slack.

This constraint is slack if the positional error is within the bounds of (jointMin, jointMax).

Returns:

True if positional error of constraint is between the limits indicating that the constraint is not doing any work.

Throws:

`#` If either of the bodies is null.

@inheritDoc