plot icon indicating copy to clipboard operation
plot copied to clipboard

vg,vg/draw: primitives for an Ellipse

Open sbinet opened this issue 5 years ago • 1 comments

unless I am mistaken, gonum/plot doesn't expose primitives to draw ellipses nor arcs of ellipses. vg.Path exposes a vg.ArcComp but that's only to draw a circular arc.

one can of course draw an ellipse with a combination of vg.CurveComp (quad or cubic ones), according to that paper: Drawing an elliptical arc using polylines, quadratic or cubic Bezier curves", L. Maisonobe

An electronic version may be found at:

  • http://spaceroots.org/documents/ellipse/elliptical-arc.pdf

I've already provided such an implementation for Gio. I could probably provide one for gonum/plot as well.

I'd propose to put it into vg/draw:

package draw

// EArc adds an elliptical arc to the path. The implied ellipse is defined
// by its focus points f1 and f2.
// The arc starts in the current point and ends angle radians along the ellipse boundary.
// The sign of angle determines the direction; positive being counter-clockwise,
// negative clockwise.
// If path is nil, a new path is created.
func EArc(path *vg.Path, f1, f2 vg.Point, angle float64) { ... }

WDYT?

sbinet avatar Oct 26 '20 10:10 sbinet

note that we could also provide other readily usable primitives:

  • Circle (a full circle)
  • Ellipse (a full ellipse)
  • Triangle
  • Square, Rectangle
  • Polygon

filled or stroked.

some of these primitives could probably already be re-used by a few plot/plotter.

sbinet avatar Oct 26 '20 10:10 sbinet