Drawing convex hull (Pic)
From LiteratePrograms
The convex hull of a set of points Q is the smallest polygon that embraces every point in Q. This article explains how to draw a convex hull diagram using pic. The exact steps to convert a pic document into a graphic format is available at Hello World (Pic).
Plotting random points
We first choose thirteen points and scatter them to a 2-dimensional plane.
P1: ( 1, 3) P2: ( 2, 7) P3: ( 9, -2) P4: (-5, 7) P5: (-7, 2) P6: (-1, 3) P7: ( 4, 6) P8: (-3, -4) P9: ( 6, 0) P10: (-2, 8) P11: ( 0, -5) P12: ( 5, 8) P13: (-4, -1)
We draw a circle at each coordinate. Note that we need the label for each point for later use.
<<points>>= P1: circle fill at (1, 3) P2: circle fill at (2, 7) P3: circle fill at (9, -2) P4: circle fill at (-5, 7) P5: circle fill at (-7, 2) P6: circle fill at (-1, 3) P7: circle fill at (4, 6) P8: circle fill at (-3, -4) P9: circle fill at (6, 0) P10: circle fill at (-2, 8) P11: circle fill at (0, -5) P12: circle fill at (5, 8) P13: circle fill at (-4, -1)
We place the name of each point at every coordinate. Note that special pic
commands such as below
, above
, ljust
, and rjust
really come in handy.
<<names>>= "$p_1$" at P1 below ljust "$p_2$" at P2 below ljust "$p_3$" at P3 below ljust "$p_4$" at P4 below ljust "$p_5$" at P5 below rjust "$p_6$" at P6 below ljust "$p_7$" at P7 below ljust "$p_8$" at P8 below rjust "$p_9$" at P9 below ljust "$p_{10}$" at P10 below ljust "$p_{11}$" at P11 below ljust "$p_{12}$" at P12 above ljust "$p_{13}$" at P13 below ljust
Embedding the information on points and names completes a whole pic
document. We could reduce the size of pic
document by adjusting scale
variables. The circlerad
variable defines the default radius of every circle in a document.
<<Scattered_points.pic>>= .PS scale = 8 circlerad = 0.2 points names .PE
Drawing convex hull
In addition to points and names, we need to draw a polygon embracing every points in a graph.
<<Scattered_points.pic>>= .PS scale = 8 circlerad = 0.2 points names lines .PE
The convex hull is drawn in dashed line. The pic
command for dashed pattern is dashed
.
<<lines>>= line dashed from P11 to P3 line dashed from P3 to P12 line dashed from P12 to P10 line dashed from P10 to P4 line dashed from P4 to P5 line dashed from P5 to P8 line dashed from P8 to P11
Download code |