proc Draw_Triangle (X1, Y1, X2, Y2, X3, Y3, Colour : int)
var XArray, YArray : array 1 .. 3 of int
XArray (1) := X1
YArray (1) := Y1
XArray (2) := X2
YArray (2) := Y2
XArray (3) := X3
YArray (3) := Y3
drawfillpolygon (XArray, YArray, 3, Colour)
end Draw_Triangle
proc Sierpinski_Triangle (X1, Y1, X2, Y2, X3, Y3, Colour, Iterations : int)
if Iterations > 0 then
Draw_Triangle((X1+X2)div 2, (Y1+Y2)div 2, (X2+X3)div 2, (Y2+Y3)div 2, (X1+X3)div 2, (Y1+Y3)div 2, Colour)
Sierpinski_Triangle (X1, Y1, (X1+X2)div 2, (Y1+Y2)div 2, (X1+X3)div 2, Y3, Colour, Iterations-1)
Sierpinski_Triangle ((X1+X3)div 2, Y1, (X2+X3)div 2, (Y2+Y3)div 2, X3, Y3, Colour, Iterations-1)
Sierpinski_Triangle ((X1+X2)div 2, (Y1+Y2)div 2, X2, Y2, (X2+X3)div 2, (Y2+Y3)div 2, Colour, Iterations-1)
end if
end Sierpinski_Triangle
var Arrow : string(1)
var Iter, Max : int := 0
put "Seirpinski's Triangle\n"
put "Controls:"
put "Up arrow - one more deep"
put "Down arrow - one less deep"
put "Escape - quit\n"
put "Enter the triangle base length (0>L>1500): "..
get Max
View.Set("graphics:" + intstr(Max) + ";" + intstr(round(Max*sind(60))+1) + ",offscreenonly,nocursor")
loop
cls
Draw_Triangle (0,0,Max div 2,round(Max*sind(60)),Max,0,black)
Sierpinski_Triangle(0,0,Max div 2,round(Max*sind(60)),Max,0,red,Iter)
View.Update
getch(Arrow)
if ord(Arrow) = 200 then
Iter += 1
elsif ord(Arrow) = 208 and Iter > 0 then
Iter -= 1
end if
exit when ord(Arrow) = 27
end loop |