lights FAQ Forum

2D Geometry


Svg-style elliptic arcs

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


  • (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.

See also: path2d_arc

Last updated: 8 years ago | Edit on GitHub

Pkg type:Lua+ffi
Version: 25f64fb
Last commit:
License: Public Domain

Requires: eq  glue  pp  luajit 

Required by: cplayer