Sierpinski triangle/Graphical: Difference between revisions
Content added Content deleted
(→{{header|Python}}: add much simpler version) |
No edit summary |
||
Line 1,999: | Line 1,999: | ||
SetVid(3); \restore normal text display |
SetVid(3); \restore normal text display |
||
]</lang> |
]</lang> |
||
=={{header|Yabasic}}== |
|||
<lang Yabasic>// Adpated from non recursive sierpinsky.bas for SmallBASIC 0.12.6 [B+=MGA] 2016-05-19 with demo mod 2016-05-29 |
|||
//Sierpinski triangle gasket drawn with lines from any 3 given points |
|||
// WITHOUT RECURSIVE Calls |
|||
//first a sub, given 3 points of a triangle draw the traiangle within |
|||
//from the midpoints of each line forming the outer triangle |
|||
//this is the basic Sierpinski Unit that is repeated at greater depths |
|||
//3 points is 6 arguments to function plus a depth level |
|||
xmax=800:ymax=600 |
|||
open window xmax,ymax |
|||
backcolor 0,0,0 |
|||
color 255,0,0 |
|||
clear window |
|||
sub SierLineTri(x1, y1, x2, y2, x3, y3, maxDepth) |
|||
local mx1, mx2, mx3, my1, my2, my3, ptcount, depth, i, X, Y |
|||
Y = 1 |
|||
//load given set of 3 points into oa = outer triangles array, ia = inner triangles array |
|||
ptCount = 3 |
|||
depth = 1 |
|||
dim oa(ptCount - 1, 1) //the outer points array |
|||
oa(0, X) = x1 |
|||
oa(0, Y) = y1 |
|||
oa(1, X) = x2 |
|||
oa(1, Y) = y2 |
|||
oa(2, X) = x3 |
|||
oa(2, Y) = y3 |
|||
dim ia(3 * ptCount - 1, 1) //the inner points array |
|||
iaIndex = 0 |
|||
while(depth <= maxDepth) |
|||
for i=0 to ptCount-1 step 3 //draw outer triangles at this level |
|||
if depth = 1 then |
|||
line oa(i,X), oa(i,Y), oa(i+1,X), oa(i+1,Y) |
|||
line oa(i+1,X), oa(i+1,Y), oa(i+2,X), oa(i+2,Y) |
|||
line oa(i,X), oa(i,Y), oa(i+2,X), oa(i+2,Y) |
|||
end if |
|||
if oa(i+1,X) < oa(i,X) then mx1 = (oa(i,X) - oa(i+1,X))/2 + oa(i+1,X) else mx1 = (oa(i+1,X) - oa(i,X))/2 + oa(i,X) endif |
|||
if oa(i+1,Y) < oa(i,Y) then my1 = (oa(i,Y) - oa(i+1,Y))/2 + oa(i+1,Y) else my1 = (oa(i+1,Y) - oa(i,Y))/2 + oa(i,Y) endif |
|||
if oa(i+2,X) < oa(i+1,X) then mx2 = (oa(i+1,X)-oa(i+2,X))/2 + oa(i+2,X) else mx2 = (oa(i+2,X)-oa(i+1,X))/2 + oa(i+1,X) endif |
|||
if oa(i+2,Y) < oa(i+1,Y) then my2 = (oa(i+1,Y)-oa(i+2,Y))/2 + oa(i+2,Y) else my2 = (oa(i+2,Y)-oa(i+1,Y))/2 + oa(i+1,Y) endif |
|||
if oa(i+2,X) < oa(i,X) then mx3 = (oa(i,X) - oa(i+2,X))/2 + oa(i+2,X) else mx3 = (oa(i+2,X) - oa(i,X))/2 + oa(i,X) endif |
|||
if oa(i+2,Y) < oa(i,Y) then my3 = (oa(i,Y) - oa(i+2,Y))/2 + oa(i+2,Y) else my3 = (oa(i+2,Y) - oa(i,Y))/2 + oa(i,Y) endif |
|||
//color 9 //testing |
|||
//draw all inner triangles |
|||
line mx1, my1, mx2, my2 |
|||
line mx2, my2, mx3, my3 |
|||
line mx1, my1, mx3, my3 |
|||
//x1, y1 with mx1, my1 and mx3, my3 |
|||
ia(iaIndex,X) = oa(i,X) |
|||
ia(iaIndex,Y) = oa(i,Y) : iaIndex = iaIndex + 1 |
|||
ia(iaIndex,X) = mx1 |
|||
ia(iaIndex,Y) = my1 : iaIndex = iaIndex + 1 |
|||
ia(iaIndex,X) = mx3 |
|||
ia(iaIndex,Y) = my3 : iaIndex = iaIndex + 1 |
|||
//x2, y2 with mx1, my1 and mx2, my2 |
|||
ia(iaIndex,X) = oa(i+1,X) |
|||
ia(iaIndex,Y) = oa(i+1,Y) : iaIndex = iaIndex + 1 |
|||
ia(iaIndex,X) = mx1 |
|||
ia(iaIndex,Y) = my1 : iaIndex = iaIndex + 1 |
|||
ia(iaIndex,X) = mx2 |
|||
ia(iaIndex,Y) = my2 : iaIndex = iaIndex + 1 |
|||
//x3, y3 with mx3, my3 and mx2, my2 |
|||
ia(iaIndex,X) = oa(i+2,X) |
|||
ia(iaIndex,Y) = oa(i+2,Y) : iaIndex = iaIndex + 1 |
|||
ia(iaIndex,X) = mx2 |
|||
ia(iaIndex,Y) = my2 : iaIndex = iaIndex + 1 |
|||
ia(iaIndex,X) = mx3 |
|||
ia(iaIndex,Y) = my3 : iaIndex = iaIndex + 1 |
|||
next i |
|||
//debug OH! |
|||
//for i= 0 to 3 * ptCount - 1 |
|||
// print ia(i,X);", ";ia(i,Y) |
|||
//next |
|||
//update and prepare for next level |
|||
ptCount = ptCount * 3 |
|||
depth = depth + 1 |
|||
redim oa(ptCount - 1, 1 ) |
|||
for i = 0 to ptCount - 1 |
|||
oa(i, X) = ia(i, X) |
|||
oa(i, Y) = ia(i, Y) |
|||
next i |
|||
redim ia(3 * ptCount - 1, 1) |
|||
iaIndex = 0 |
|||
wend |
|||
end sub |
|||
//Test Demo for the sub (NEW as 2016 - 05 - 29 !!!!!) |
|||
cx=xmax/2 |
|||
cy=ymax/2 |
|||
r=cy - 20 |
|||
N=3 |
|||
for i = 0 to 2 |
|||
color 64+42*i,64+42*i,64+42*i |
|||
SierLineTri(cx, cy, cx+r*cos(2*pi/N*i), cy +r*sin(2*pi/N*i), cx + r*cos(2*pi/N*(i+1)), cy + r*sin(2*pi/N*(i+1)), 5) |
|||
next i |
|||
</lang> |
|||
=={{header|zkl}}== |
=={{header|zkl}}== |