ellipse
ellipse(cx, cy, rx, ry, [rotate=])
Input: cx, cy, rx, ry, rotate · Output: no output
What it is
Draws an ellipse centered at (cx, cy) (numbers) with semi-axis radii rx and ry (numbers, data units along x and y respectively). rotate= (number, degrees, anticlockwise, default 0) tilts the whole ellipse about its center.
Overloads
One call shape — this function is not overloaded.
| Code | Input | Output | Description |
ellipse(cx, cy, rx, ry, [rotate=]) | cx numberDraws an ellipse centered at (cx, cy) (numbers) with semi-axis radii rx and ry (numbers, data units along x and y respectively).cy numberDraws an ellipse centered at (cx, cy) (numbers) with semi-axis radii rx and ry (numbers, data units along x and y respectively).rx numberDraws an ellipse centered at (cx, cy) (numbers) with semi-axis radii rx and ry (numbers, data units along x and y respectively).ry numberDraws an ellipse centered at (cx, cy) (numbers) with semi-axis radii rx and ry (numbers, data units along x and y respectively).rotate number, optionalrotate= (number, degrees, anticlockwise, default 0) tilts the whole ellipse about its center. | no output | — |
Examples
From the documentation, and run by the build -- the output and the figure below are what the engine actually produced. Simplest first.
# A square canvas, so that equal ranges really are equal scales and the
# circle below comes out round. Without it the figure would render an
# ellipse while the paragraph above it explained how to avoid one.
figure_size(560, 560)
xlim(-2, 2)
ylim(-2, 2)
axis equal
circle(0, 0, 1, color = "royalblue", fill = "royalblue")
ellipse(0, 0, 1.6, 0.7, color = "crimson", rotate = 30)
arc(0, 0, 1.3, 0, 120, color = "seagreen", width = 2)
polygon([0.8, 1.6, 1.2], [-1.6, -1.6, -0.9], color = "purple", fill = "plum")
rectangle(-1.8, -1.8, -1.2, -1.2, color = "orange")
rect(1.0, -1.8, 1.8, -1.2, color = "teal")
point(0, 1.9)
from plotting
How it works
── shapes ────────────────────────────────────────────── circle(cx, cy, r), ellipse(cx, cy, rx, ry), arc(cx, cy, r, from_deg, to_deg), polygon(xs, ys). All are sampled in DATA space and mapped through the axis transform, so a circle stays a circle when the axes are equal and becomes the correct ellipse when they are not. Emitting an SVG <circle> at a pixel radius would be simpler and would draw the wrong shape on any panel whose scales differ -- which is most of them. segments= controls the sampling; 128 is smooth at any figure size a paper uses and cheap enough not to think about.
From the note above this builtin in the interpreter, where the reasoning was written down as it was built.