Pentagram: Difference between revisions
Content added Content deleted
(Added Wren) |
(Added XPL0 example.) |
||
Line 1,496: | Line 1,496: | ||
} |
} |
||
}</lang> |
}</lang> |
||
=={{header|XPL0}}== |
|||
<lang XPL0>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) |
|||
]</lang> |
|||
=={{header|zkl}}== |
=={{header|zkl}}== |