Polygon Renderers

Last updated 2025 August 25

This page documents library functions that render polygons.

nn-Sided Regular Polygon

dpolygon(n,pcentre,r,d)d_ ext{polygon} left(, n, p_ ext{centre}, r, d , ight)

Generate vertices of an nn-sided regular polygon.

Arguments

ArgumentDescriptionTypeConstraintsNotes
nnnumber of sidesZ+\mathbb{Z}^{+}3n3 \leq n (required)
pcentrep_\text{centre}centre(R,R)(\mathbb{R}, \mathbb{R})
rrradius of the polygonR\mathbb{R}r0r \neq 0 (required)
0<r0 < r
“Radius” refers to the distance from the centre of the polygon to any vertex.
dddirection (rotation)R\mathbb{R}0d<2π0 \leq d < 2\pi

Return

ValueDescriptionTypeConstraintsNotes
ω\omegapolygon vertices[(R,R),...][(\mathbb{R}, \mathbb{R}), ...]Use polygon(ω)\operatorname{polygon}(\omega) to render the polygon.

Usage

f_{nrange}\left(s_{start},\ s_{stop},\ n\right)=\left[\left(s_{start}+i\left(\frac{s_{stop}-s_{start}}{n-1}\right)\right)\operatorname{for}i=\left[0...\left(n-1\right)\right]\right]
d_{polygon}\left(n,\ p_{centre},\ r,\ d\right)=\left[\left(p_{centre}.x+r\cos\theta,\ p_{centre}.y+r\sin\theta\right)\operatorname{for}\theta=f_{nrange}\left(d,\ d+2\pi,\ n+1\right)\right]
\operatorname{polygon}\left(d_{polygon}\left(6,\ \left(0,\ 0\right),\ 4,\ \frac{\pi}{6}\right)\right)

Implementation

dpolygon(n,pcentre,r,d)=[(pcentre.x+rcosθ, pcentre.y+rsinθ)forθ=fnrange(d, d+2π, n+1)]d_ ext{polygon} left(, n, p_ ext{centre}, r, d , ight) = left[, left(p_{centre}.x+rcos heta, p_{centre}.y+rsin heta ight)operatorname{for} heta=f_{nrange}left(d, d+2pi, n+1 ight) , ight]

Dependencies

  • fnrange()f_\text{nrange}()

Rectangle

drect(pcentre,x,y)d_ ext{rect} left(, p_ ext{centre}, x, y , ight)

Draw a rectangle at centre pcentrep_\text{centre} with dimensions x×yx \times y.

Arguments

ArgumentDescriptionTypeConstraintsNotes
pcentrep_\text{centre}rectangle centre(R,R)(\mathbb{R}, \mathbb{R})
xxrectangle widthR+\mathbb{R}^{+}
yyrectangle heightR+\mathbb{R}^{+}

Return

None

Usage

d_{rect}\left(p_{centre},\ s_{width},\ s_{height}\right)=\operatorname{polygon}\left(p_{centre}+\left(-\frac{s_{width}}{2},\ -\frac{s_{height}}{2}\right),\ p_{centre}+\left(\frac{s_{width}}{2},\ -\frac{s_{height}}{2}\right),\ p_{centre}+\left(\frac{s_{width}}{2},\ \frac{s_{height}}{2}\right),\ p_{centre}+\left(-\frac{s_{width}}{2},\ \frac{s_{height}}{2}\right)\right)
d_{rect}\left(\left(3,\ 2\right),\ 4,\ 1\right)

Implementation

drect(pcentre,x,y)=polygon(pcentre+(x2, y2), pcentre+(x2, y2), pcentre+(x2, y2), pcentre+(x2, y2))d_ ext{rect} left(, p_ ext{centre}, x, y , ight) = operatorname{polygon}left(p_{centre}+left(- rac{x}{2}, - rac{y}{2} ight), p_{centre}+left( rac{x}{2}, - rac{y}{2} ight), p_{centre}+left( rac{x}{2}, rac{y}{2} ight), p_{centre}+left(- rac{x}{2}, rac{y}{2} ight) ight)

Dependencies

None

Aligned Rectangle

drectaligned(ppivot,pxy,palign)d_ ext{rectaligned} left(, p_ ext{pivot}, p_{xy}, p_ ext{align} , ight)

Draw a rectangle at pivot ppivotp_\text{pivot} with dimensions pxyp_{xy}.

Arguments

ArgumentDescriptionDomainConstraintsNotes
ppivotp_\text{pivot}pivot point(R,R)(\mathbb{R}, \mathbb{R})
pxyp_\text{xy}rectangle dimensions(R,R)(\mathbb{R}, \mathbb{R})
palignp_\text{align}alignment(R,R)(\mathbb{R}, \mathbb{R})(1,1)palign(1,1)(-1, -1) \leq p_\text{align} \leq (1, 1)(1,1)(-1, -1) means the upper-right corner is used as the pivot (the rectangle is drawn in the negative quadrant).

Return

None

Usage

d_{rectaligned}\left(p_{pivot},\ p_{xy},\ p_{align}\right)=\operatorname{polygon}\left(p_{pivot}+\left(\left(p_{align}.x-1\right)\frac{p_{xy}.x}{2},\ \left(p_{align}.y-1\right)\frac{p_{xy}.y}{2}\right),\ p_{pivot}+\left(\left(p_{align}.x+1\right)\frac{p_{xy}.x}{2},\ \left(p_{align}.y-1\right)\frac{p_{xy}.y}{2}\right),\ p_{pivot}+\left(\left(p_{align}.x+1\right)\cdot\frac{p_{xy}.x}{2},\ \left(p_{align}.y+1\right)\frac{p_{xy}.y}{2}\right),\ p_{pivot}+\left(\left(p_{align}.x-1\right)\cdot\frac{p_{xy}.x}{2},\ \left(p_{align}.y+1\right)\frac{p_{xy}.y}{2}\right)\right)
d_{rectaligned}\left(\left(0,\ 0\right),\ \left(3,\ 4\right),\ \left(-1,\ -1\right)\right)
d_{rectaligned}\left(\left(2,\ 2\right),\ \left(5,\ 5\right),\ \left(1,\ -1\right)\right)

Implementation

drectaligned(ppivot,pxy,palign)=polygon(ppivot+((palign.x1)pxy.x2, (palign.y1)pxy.y2), ppivot+((palign.x+1)pxy.x2, (palign.y1)pxy.y2), ppivot+((palign.x+1)pxy.x2, (palign.y+1)pxy.y2), ppivot+((palign.x1)pxy.x2, (palign.y+1)pxy.y2))d_ ext{rectaligned} left(, p_ ext{pivot}, p_{xy}, p_ ext{align} , ight) = operatorname{polygon}left( p_{pivot}+left(left(p_{align}.x-1 ight) rac{p_{xy}.x}{2}, left(p_{align}.y-1 ight) rac{p_{xy}.y}{2} ight), p_{pivot}+left(left(p_{align}.x+1 ight) rac{p_{xy}.x}{2}, left(p_{align}.y-1 ight) rac{p_{xy}.y}{2} ight), p_{pivot}+left(left(p_{align}.x+1 ight)cdot rac{p_{xy}.x}{2}, left(p_{align}.y+1 ight) rac{p_{xy}.y}{2} ight), p_{pivot}+left(left(p_{align}.x-1 ight)cdot rac{p_{xy}.x}{2}, left(p_{align}.y+1 ight) rac{p_{xy}.y}{2} ight) ight)

Dependencies

None

See an oversight or error? Drop an issue on GitHub.