
A pentagram is a star polygon, consisting of a central pentagon of which each side forms the base of an isosceles triangle. The vertex of each triangle, a point of the star, is 36 degrees.




Task

Draw (or print) a regular pentagram, in any orientation. Use a different color (or token) for stroke and fill, and background. For the fill it should be assumed that all points inside the triangles and the pentagon are inside the pentagram.




See also
 Angle sum of a pentagram


proc    FillArea(X, Y, C0, C);  \Replace area colored C0 with color C
int     X, Y,   \starting coordinate for flood fill algorithm
        C0, C;  \initial color, and color to replace it with
def     S=8000; \size of queue (must be an even number)
int     Q(S),   \queue (FIFO)
        F, E;   \fill and empty indexes
 
        proc    EnQ(X, Y);      \Enqueue coordinate
        int     X, Y;
        [Q(F):= X;
        F:= F+1;
        Q(F):= Y;
        F:= F+1;
        if F >= S then F:= 0;
        ];      \EnQ
 
        proc    DeQ;            \Dequeue coordinate
        [X:= Q(E);
        E:= E+1;
        Y:= Q(E);
        E:= E+1;
        if E >= S then E:= 0;
        ];      \DeQ
 
[if C0 = C then return;
F:= 0;  E:= 0;
EnQ(X, Y);
while E # F do
        [DeQ;
        if ReadPix(X, Y) = C0 then
                [Point(X, Y, C);
                EnQ(X+1, Y);    \enqueue adjacent pixels
                EnQ(X-1, Y);
                EnQ(X, Y+1);
                EnQ(X, Y-1);
                ];
        ];
];      \FillArea
 
def     Size = 200.;
def     Pi = 3.141592654;
def     Deg144 = 4.*Pi/5.;
int     X, Y, N;
[SetVid($12);           \set 640x480x4 VGA graphics
for Y:= 0 to 480-1 do   \fill screen
        [Move(0, Y);  Line(640-1, Y, $F\white\)];
for N:= 0 to 5 do       \draw pentagram
        [X:= fix(Size*Sin(float(N)*Deg144));
         Y:= fix(Size*Cos(float(N)*Deg144));
         if N = 0 then Move(X+320, 240-Y)
                  else Line(X+320, 240-Y, 4\red\);
        ];
FillArea(0, 0, $F, 1);  \replace white (F) with blue (1)
]