
-----------------------------------
BenLi
Tue May 02, 2006 3:17 pm

Serpinsky Triangle with recursion
-----------------------------------
Hey,
this is my first attempt at recursion, probably going to make a fractal tree next


setscreen ("graphics:800;600")
%serpinsky
var middlex, middley:int
%var x1,y1,x2,y2,x3,y3:int

fcn midx (x1, x2:int):int
middlex:= (((x2 - x1)div 2)+ x1)
result middlex
end midx

fcn midy (y1, y2:int):int
middley:= (((y2 - y1)div 2)+ y1)
result middley
end midy

proc serpinsky (x1, y1, x2, y2, x3, y3:int) 
drawline (x1, y1, x2, y2, black)
drawline (x2, y2, x3, y3, black)
drawline (x1, y1, x3, y3, black)

drawline (midx (x1, x2), midy ( y1, y2), midx (x1, x3), midy ( y1, y3), black)
drawline (midx (x1, x2), midy ( y1, y2), midx (x2, x3), midy ( y2, y3), black)
drawline (midx (x1, x3), midy ( y1, y3), midx (x2, x3), midy ( y2, y3), black)

serpinsky (midx (x1, x2), midy ( y1, y2),midx (x1, x3), midy ( y1, y3),midx (x2, x3), midy ( y2, y3))
end serpinsky
serpinsky (0, 0, 400, 600, maxx, 0)


actually, its not actually a serpinsky yet...

-----------------------------------
zylum
Tue May 02, 2006 3:54 pm


-----------------------------------
suggestion: make sure you have a terminating condition for your recursion. if you let your program run long enough, it eats up all the memory and crashes.

also, like you mentioned, its not quite a serpinsky triangle. an easy way to make a serpinsky triangle is to draw your beginning triangle, then half way between its centre and each of its vertices, draw another one half its size.

setscreen ("graphics:600;600")

proc triangle (cx, cy, s : real, d : int)
    if d = 0 then
        return
    end if
    var x, y : array 1 .. 3 of int
    for i : 1 .. 3
        x (i) := round (cosd (i * 120 - 30) * s + cx)
        y (i) := round (sind (i * 120 - 30) * s + cy)
        triangle (cosd (i * 120 - 30) * (s / 2) + cx, sind (i * 120 - 30) * (s / 2) + cy, s / 2, d - 1)
    end for
    drawpolygon (x, y, 3, black)
    delay (10)
end triangle

triangle (maxx div 2, maxy div 3, 340, 7)

good luck with your fractal tree and recursion  :wink:  there are a few good source codes for fractal trees. also take a look at my recursion tutorial in turing tutorials  8-)

-----------------------------------
MysticVegeta
Tue May 02, 2006 5:43 pm


-----------------------------------
zylum, I haven't taken grade 11 trig yet, can you guide me over what is happening in the draw polygon? I understand the recursion but I dont understand how you come up with values for the x and y array, I know they represent the vertices of the triangle, but dont know whats going on in them, lol

-----------------------------------
HellblazerX
Tue May 02, 2006 7:24 pm


-----------------------------------
First of all, drawpolygon takes in an array of coordinates to draw the polygon.  A triangle has three points, so he puts in an array of 3 x coordinates and an array of 3 y coordinates to draw the triangle.  To get the x and y coordinates, he just takes the trigonometric values of them in the unit circle, and mulitplying by the size of the triangle.  This way he can resize the triangles very easily.

-----------------------------------
zylum
Tue May 02, 2006 9:00 pm


-----------------------------------
what ^he^ said  :wink:

-----------------------------------
MysticVegeta
Wed May 03, 2006 1:39 pm


-----------------------------------
First of all, drawpolygon takes in an array of coordinates to draw the polygon.  A triangle has three points, so he puts in an array of 3 x coordinates and an array of 3 y coordinates to draw the triangle.  To get the x and y coordinates, he just takes the trigonometric values of them in the unit circle, and mulitplying by the size of the triangle.  This way he can resize the triangles very easily.

yeah I know that but I asked, how to "come up" withthe x and y vals, just the trig part I have a hard time understanding...
