2D Geometry
path2d
affine2d
box2d
clipper

# path2d_svgarc

## `local svgarc = require'path2d_svgarc'`

Math for 2D SVG-style endpoint parametrization elliptic arcs defined as:

``x1, y1, radius_x, radius_y, rotation, large_arc_flag, sweep_flag, x2, y2``

where:

• `(x1, y1)` and `(x2, y2)` are the arcâ€™s endpoints
• `radius_x` and `radius_y` are the two radii of the ellipse. If negative, the absolute values are used.
• rotation is the x-axis rotation of the ellipse and defaults to 0.
• `large_arc_flag` is 1 if the arc should be > 180 degrees and 0 if not.
• `sweep_flag` is 1 for a clockwise sweep and 0 for an anticlockwise sweep.

The two flags are needed because with just the endpoints and the ellipse radii, there can be 2 possible ellipses and thus 4 possible arcs that can be represented. The flags help narrow it down to one arc.

``````svgarc.to_arc(x1, y1, rx, ry, rotation, large_arc_flag, sweep_flag, x2, y2, ...) ->
cx, cy, rx, ry, start_angle, sweep_angle, rotation, ...``````

Convert an elliptic arc from endpoint parametrization to center parametrization.

If the endpoints conicide or rx or ry is 0, the parametrization is invalid and nothing is returned.

``````svgarc.split(t, x1, y1, rx, ry, rotation, large_arc_flag, sweep_flag, x2, y2) ->
x11, y11, rx1, ry1, rotation1, large_arc_flag1, sweep_flag1, x22, y22
x21, y21, rx2, ry2, rotation2, large_arc_flag2, sweep_flag2, x22, y22``````

Split a svg elliptic arc at time `t` into two svg arcs.