Computer Science Canada

Snowflake - I need to "Simplyfy" it...

Author:  mbslrm [ Mon Dec 17, 2007 10:09 pm ]
Post subject:  Snowflake - I need to "Simplyfy" 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:
code:
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]

Author:  Nick [ Mon Dec 17, 2007 10:15 pm ]
Post subject:  RE:Snowflake - I need to "Simplyfy" 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)

Author:  HeavenAgain [ Mon Dec 17, 2007 10:16 pm ]
Post subject:  RE:Snowflake - I need to "Simplyfy" it...

ahem, reminds me of koch snowflake
here is the animation
here is the concepts

Author:  Saad [ Mon Dec 17, 2007 10:23 pm ]
Post subject:  RE:Snowflake - I need to "Simplyfy" 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.

Author:  mbslrm [ Tue Dec 18, 2007 10:24 pm ]
Post subject:  Re: Snowflake - I need to "Simplyfy" 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!

code:

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

Author:  syntax_error [ Tue Dec 18, 2007 11:04 pm ]
Post subject:  Re: Snowflake - I need to "Simplyfy" it...

mbslrm wrote:

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

Author:  mbslrm [ Tue Dec 18, 2007 11:14 pm ]
Post subject:  Re: Snowflake - I need to "Simplyfy" it...

syntax_error @ Tue Dec 18, 2007 11:04 pm wrote:
mbslrm wrote:

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.

Author:  Nick [ Wed Dec 19, 2007 6:28 am ]
Post subject:  RE:Snowflake - I need to "Simplyfy" it...

i like to post the code as an attachment so that you can always go to your control panel and delete it there


: