
-----------------------------------
mbslrm
Mon Dec 17, 2007 10:09 pm

Snowflake - I need to &quot;Simplyfy&quot; it...
-----------------------------------
I've made a snowflake by drawing individual lines. To make it easier, I drew one quarter ("quadrant") of it, and then reflected it to make the full snowflake. The way I did this is by making all the coordinates in relation to x and y, which is the centre of the snowflake. If this doesn't make sense, it will once I post the code.

Now, I need to draw many (I'm guessing 30) for my final program, and it's already really laggy, even with View.Update. The way I think I can avoid this, is by drawing my snowflake with less lines, or something else that isn't as resource-heavy.

Thanks in advance!

Here is the procedure:
setscreen ("graphics:700;700 div Scale, offscreenonlyStar")
colourback (75)
cls
proc snowflake (xStar, yStar, Colour, Scale : int)
    %quadrant 1
    drawline (xStar, yStar + 84 div Scale, xStar + 6 div Scale, yStar + 84 div Scale, Colour)
    drawline (xStar + 6 div Scale, yStar + 84 div Scale, xStar + 6 div Scale, yStar + 58 div Scale, Colour)
    drawline (xStar + 6 div Scale, yStar + 58 div Scale, xStar + 25 div Scale, yStar + 71 div Scale, Colour)
    drawline (xStar + 25 div Scale, yStar + 71 div Scale, xStar + 29 div Scale, yStar + 62 div Scale, Colour)
    drawline (xStar + 29 div Scale, yStar + 62 div Scale, xStar + 6 div Scale, yStar + 47 div Scale, Colour)
    drawline (xStar + 6 div Scale, yStar + 47 div Scale, xStar + 6 div Scale, yStar + 9 div Scale, Colour)
    drawline (xStar + 6 div Scale, yStar + 9 div Scale, xStar + 37 div Scale, yStar + 29 div Scale, Colour)     %
    drawline (xStar + 37 div Scale, yStar + 29 div Scale, xStar + 37 div Scale, yStar + 57 div Scale, Colour)     %
    drawline (xStar + 37 div Scale, yStar + 57 div Scale, xStar + 48 div Scale, yStar + 57 div Scale, Colour)
    drawline (xStar + 48 div Scale, yStar + 57 div Scale, xStar + 48 div Scale, yStar + 36 div Scale, Colour)
    drawline (xStar + 48 div Scale, yStar + 36 div Scale, xStar + 68 div Scale, yStar + 48 div Scale, Colour)
    drawline (xStar + 68 div Scale, yStar + 48 div Scale, xStar + 75 div Scale, yStar + 37 div Scale, Colour)
    drawline (xStar + 75 div Scale, yStar + 37 div Scale, xStar + 53 div Scale, yStar + 24 div Scale, Colour)
    drawline (xStar + 53 div Scale, yStar + 24 div Scale, xStar + 73 div Scale, yStar + 14 div Scale, Colour)
    drawline (xStar + 73 div Scale, yStar + 14 div Scale, xStar + 67 div Scale, yStar + 5 div Scale, Colour)
    drawline (xStar + 67 div Scale, yStar + 5 div Scale, xStar + 42 div Scale, yStar + 19 div Scale, Colour)
    drawline (xStar + 42 div Scale, yStar + 19 div Scale, xStar + 10 div Scale, yStar, Colour)
    %quadrant 2
    drawline (xStar, yStar - 84 div Scale, xStar + 6 div Scale, yStar - 84 div Scale, Colour)
    drawline (xStar + 6 div Scale, yStar - 84 div Scale, xStar + 6 div Scale, yStar - 58 div Scale, Colour)
    drawline (xStar + 6 div Scale, yStar - 58 div Scale, xStar + 25 div Scale, yStar - 71 div Scale, Colour)
    drawline (xStar + 25 div Scale, yStar - 71 div Scale, xStar + 29 div Scale, yStar - 62 div Scale, Colour)
    drawline (xStar + 29 div Scale, yStar - 62 div Scale, xStar + 6 div Scale, yStar - 47 div Scale, Colour)
    drawline (xStar + 6 div Scale, yStar - 47 div Scale, xStar + 6 div Scale, yStar - 9 div Scale, Colour)
    drawline (xStar + 6 div Scale, yStar - 9 div Scale, xStar + 37 div Scale, yStar - 29 div Scale, Colour)     %
    drawline (xStar + 37 div Scale, yStar - 29 div Scale, xStar + 37 div Scale, yStar - 57 div Scale, Colour)     %
    drawline (xStar + 37 div Scale, yStar - 57 div Scale, xStar + 48 div Scale, yStar - 57 div Scale, Colour)
    drawline (xStar + 48 div Scale, yStar - 57 div Scale, xStar + 48 div Scale, yStar - 36 div Scale, Colour)
    drawline (xStar + 48 div Scale, yStar - 36 div Scale, xStar + 68 div Scale, yStar - 48 div Scale, Colour)
    drawline (xStar + 68 div Scale, yStar - 48 div Scale, xStar + 75 div Scale, yStar - 37 div Scale, Colour)
    drawline (xStar + 75 div Scale, yStar - 37 div Scale, xStar + 53 div Scale, yStar - 24 div Scale, Colour)
    drawline (xStar + 53 div Scale, yStar - 24 div Scale, xStar + 73 div Scale, yStar - 14 div Scale, Colour)
    drawline (xStar + 73 div Scale, yStar - 14 div Scale, xStar + 67 div Scale, yStar - 5 div Scale, Colour)
    drawline (xStar + 67 div Scale, yStar - 5 div Scale, xStar + 42 div Scale, yStar - 19 div Scale, Colour)
    drawline (xStar + 42 div Scale, yStar - 19 div Scale, xStar + 10 div Scale, yStar, Colour)
    %quadrant 3
    drawline (xStar, yStar - 84 div Scale, xStar - 6 div Scale, yStar - 84 div Scale, Colour)
    drawline (xStar - 6 div Scale, yStar - 84 div Scale, xStar - 6 div Scale, yStar - 58 div Scale, Colour)
    drawline (xStar - 6 div Scale, yStar - 58 div Scale, xStar - 25 div Scale, yStar - 71 div Scale, Colour)
    drawline (xStar - 25 div Scale, yStar - 71 div Scale, xStar - 29 div Scale, yStar - 62 div Scale, Colour)
    drawline (xStar - 29 div Scale, yStar - 62 div Scale, xStar - 6 div Scale, yStar - 47 div Scale, Colour)
    drawline (xStar - 6 div Scale, yStar - 47 div Scale, xStar - 6 div Scale, yStar - 9 div Scale, Colour)
    drawline (xStar - 6 div Scale, yStar - 9 div Scale, xStar - 37 div Scale, yStar - 29 div Scale, Colour)     %
    drawline (xStar - 37 div Scale, yStar - 29 div Scale, xStar - 37 div Scale, yStar - 57 div Scale, Colour)     %
    drawline (xStar - 37 div Scale, yStar - 57 div Scale, xStar - 48 div Scale, yStar - 57 div Scale, Colour)
    drawline (xStar - 48 div Scale, yStar - 57 div Scale, xStar - 48 div Scale, yStar - 36 div Scale, Colour)
    drawline (xStar - 48 div Scale, yStar - 36 div Scale, xStar - 68 div Scale, yStar - 48 div Scale, Colour)
    drawline (xStar - 68 div Scale, yStar - 48 div Scale, xStar - 75 div Scale, yStar - 37 div Scale, Colour)
    drawline (xStar - 75 div Scale, yStar - 37 div Scale, xStar - 53 div Scale, yStar - 24 div Scale, Colour)
    drawline (xStar - 53 div Scale, yStar - 24 div Scale, xStar - 73 div Scale, yStar - 14 div Scale, Colour)
    drawline (xStar - 73 div Scale, yStar - 14 div Scale, xStar - 67 div Scale, yStar - 5 div Scale, Colour)
    drawline (xStar - 67 div Scale, yStar - 5 div Scale, xStar - 42 div Scale, yStar - 19 div Scale, Colour)
    drawline (xStar - 42 div Scale, yStar - 19 div Scale, xStar - 10 div Scale, yStar, Colour)
    %quadrant 4
    drawline (xStar, yStar + 84 div Scale, xStar - 6 div Scale, yStar + 84 div Scale, Colour)
    drawline (xStar - 6 div Scale, yStar + 84 div Scale, xStar - 6 div Scale, yStar + 58 div Scale, Colour)
    drawline (xStar - 6 div Scale, yStar + 58 div Scale, xStar - 25 div Scale, yStar + 71 div Scale, Colour)
    drawline (xStar - 25 div Scale, yStar + 71 div Scale, xStar - 29 div Scale, yStar + 62 div Scale, Colour)
    drawline (xStar - 29 div Scale, yStar + 62 div Scale, xStar - 6 div Scale, yStar + 47 div Scale, Colour)
    drawline (xStar - 6 div Scale, yStar + 47 div Scale, xStar - 6 div Scale, yStar + 9 div Scale, Colour)
    drawline (xStar - 6 div Scale, yStar + 9 div Scale, xStar - 37 div Scale, yStar + 29 div Scale, Colour)     %
    drawline (xStar - 37 div Scale, yStar + 29 div Scale, xStar - 37 div Scale, yStar + 57 div Scale, Colour)     %
    drawline (xStar - 37 div Scale, yStar + 57 div Scale, xStar - 48 div Scale, yStar + 57 div Scale, Colour)
    drawline (xStar - 48 div Scale, yStar + 57 div Scale, xStar - 48 div Scale, yStar + 36 div Scale, Colour)
    drawline (xStar - 48 div Scale, yStar + 36 div Scale, xStar - 68 div Scale, yStar + 48 div Scale, Colour)
    drawline (xStar - 68 div Scale, yStar + 48 div Scale, xStar - 75 div Scale, yStar + 37 div Scale, Colour)
    drawline (xStar - 75 div Scale, yStar + 37 div Scale, xStar - 53 div Scale, yStar + 24 div Scale, Colour)
    drawline (xStar - 53 div Scale, yStar + 24 div Scale, xStar - 73 div Scale, yStar + 14 div Scale, Colour)
    drawline (xStar - 73 div Scale, yStar + 14 div Scale, xStar - 67 div Scale, yStar + 5 div Scale, Colour)
    drawline (xStar - 67 div Scale, yStar + 5 div Scale, xStar - 42 div Scale, yStar + 19 div Scale, Colour)
    drawline (xStar - 42 div Scale, yStar + 19 div Scale, xStar - 10 div Scale, yStar, Colour)

    drawfill (xStar, yStar, Colour, Colour)

end snowflake[/quote]

-----------------------------------
Nick
Mon Dec 17, 2007 10:15 pm

RE:Snowflake - I need to &quot;Simplyfy&quot; it...
-----------------------------------
one suggestion is to use either Draw.ThickLine or drawfillbox

also I was never to fond of drawfill (because of filling something with the same outline color in the background messes up the final appeal)

-----------------------------------
HeavenAgain
Mon Dec 17, 2007 10:16 pm

RE:Snowflake - I need to &quot;Simplyfy&quot; it...
-----------------------------------
ahem, reminds me of koch snowflake
[url=http://math.rice.edu/~lanius/frac/koch/koch.html]here is the animation
[url=http://math.rice.edu/~lanius/frac/koch.html]here is the concepts

-----------------------------------
Saad
Mon Dec 17, 2007 10:23 pm

RE:Snowflake - I need to &quot;Simplyfy&quot; it...
-----------------------------------
What I will suggest is possibly using recursion. If you haven't head of recursion there are tutorials in the turing tutorial's, use recursion will cut the code length down tremendously.

-----------------------------------
mbslrm
Tue Dec 18, 2007 10:24 pm

Re: Snowflake - I need to &quot;Simplyfy&quot; it...
-----------------------------------
I revised my program, and tried to make it appear as if the snow is falling. I also tried to add "saw" to it, by having it add x and then subtract x from the x coordinate, depending if the iteration is odd or even. I also put in something so that the background colour would change after each iteration, but it isn't.

BTW, can the code from my first post be removed? Thanks!


var xStar, yStar, xSway, ySpeed, Scale, Size : array 1 .. 150 of int
var Colour : int := 2

setscreen ("graphics:1200;700, offscreenonly")
colourback (black)
cls
colour (white)
proc drawflake (xStar, yStar, Scale, Size : int)
    Draw.ThickLine (xStar, yStar, xStar, yStar + 80 div Scale, Size, 0)
    Draw.ThickLine (xStar, yStar, xStar + 63 div Scale, yStar + 50 div Scale, Size, 0)

    Draw.ThickLine (xStar, yStar, xStar, yStar - 80 div Scale, Size, 0)
    Draw.ThickLine (xStar, yStar, xStar + 63 div Scale, yStar - 50 div Scale, Size, 0)

    Draw.ThickLine (xStar, yStar, xStar, yStar - 80 div Scale, Size, 0)
    Draw.ThickLine (xStar, yStar, xStar - 63 div Scale, yStar - 50 div Scale, Size, 0)

    Draw.ThickLine (xStar, yStar, xStar, yStar + 80 div Scale, Size, 0)
    Draw.ThickLine (xStar, yStar, xStar - 63 div Scale, yStar + 50 div Scale, Size, 0)
end drawflake

proc setflakes
    var j : int := 0
    for i : 1 .. 150
        yStar (i) := Rand.Int (700, 850)
        xStar (i) := Rand.Int (0, 1200)
        ySpeed (i) := Rand.Int (1, 7)
        xSway (i) := Rand.Int (-5, 5)
        Scale (i) := Rand.Int (5, 7)
        if Scale (i) = 5 then
            Size (i) := 5
        elsif Scale (i) = 7 then
            Size (i) := 7
        elsif Scale (i) = 6 then
            Size (i) := 6
        end if
    end for
   loop
        for i : 1 .. 150
            if i rem 2 = 1 then
                drawflake (xStar (i) - xSway (i), yStar (i) - (ySpeed (i) * (j + 1)), Scale (i), Size (i))
                colourback (red)
            elsif i rem 2 = 0 then
                drawflake (xStar (i) + xSway (i), yStar (i) - (ySpeed (i) * (j + 1)), Scale (i), Size (i))
                colourback (green)
            end if
        end for
        delay (10)
        View.Update
        cls
        j += 1
        exit when j = 10000
    end loop
end setflakes

setflakes


-----------------------------------
syntax_error
Tue Dec 18, 2007 11:04 pm

Re: Snowflake - I need to &quot;Simplyfy&quot; it...
-----------------------------------

BTW, can the code from my first post be removed? Thanks! 
jsut click on ur first post on the right hand side there is an edit button

-----------------------------------
mbslrm
Tue Dec 18, 2007 11:14 pm

Re: Snowflake - I need to &quot;Simplyfy&quot; it...
-----------------------------------

BTW, can the code from my first post be removed? Thanks! 
jsut click on ur first post on the right hand side there is an edit button
I already tried that and it said I can't edit posts that have been replied to.

-----------------------------------
Nick
Wed Dec 19, 2007 6:28 am

RE:Snowflake - I need to &quot;Simplyfy&quot; it...
-----------------------------------
i like to post the code as an attachment so that you can always go to your control panel and delete it there
