Programming C, C++, Java, PHP, Ruby, Turing, VB
Computer Science Canada 
Programming C, C++, Java, PHP, Ruby, Turing, VB  

Username:   Password: 
 RegisterRegister   
 [Contest] Cubular
Index -> Contests
Goto page 1, 2  Next
View previous topic Printable versionDownload TopicSubscribe to this topicPrivate MessagesRefresh page View next topic
Author Message
Catalyst




PostPosted: Sun May 25, 2003 12:13 am   Post subject: [Contest] Cubular

Ill give +50 bits to the first person who can make a 3d spinning cube (ill give another +25 bits to the person that can do it in <50 lines without stacking commands)

rules:
cant use any 3d engine (including mine)
must spin on all axes AND have perspective

No end date on this one
Sponsor
Sponsor
Sponsor
sponsor
Asok




PostPosted: Sun May 25, 2003 12:40 am   Post subject: (No subject)

I'm sure one has allready been posted somewhere on the forum by you.
Catalyst




PostPosted: Sun May 25, 2003 12:44 am   Post subject: (No subject)

nope, not in source form
Tony




PostPosted: Sun May 25, 2003 12:51 am   Post subject: (No subject)

could you clarify having perspective requirement?
Latest from compsci.ca/blog: Tony's programming blog. DWITE - a programming contest.
Catalyst




PostPosted: Sun May 25, 2003 12:59 am   Post subject: (No subject)

it has to have a perspective deformation
i.e. it gets smaller as it goes back,etc
Homer_simpson




PostPosted: Sun May 25, 2003 11:43 am   Post subject: (No subject)

i'm almost done and everything works so perfectly but one question... how do i caculate the origin of my cube to be rotated on ?
Homer_simpson




PostPosted: Sun May 25, 2003 11:46 am   Post subject: (No subject)

this is what it looks like so far...
code:
procedure rotate (OriginX, OriginY : real, var secondpartX, secondpartY : real, Rotaion : real)
    var tempx := (((OriginX - secondpartX) * cosd (Rotaion)) + ((OriginY - secondpartY) * sind (Rotaion)))
    var tempy := (((OriginY - secondpartY) * cosd (Rotaion)) - ((OriginX - secondpartX) * sind (Rotaion)))
    secondpartY := OriginY - tempy
    secondpartX := OriginX - tempx
end rotate
type dot :
    record
        x, y, z : real
    end record
type cube :
    record
        d : array 1 .. 10 of dot
        center : dot
    end record
var cube1 : cube
procedure movecube (var c : cube, x, y, z : real)
    for i : 1 .. 8
        c.d (i).x += x
        c.d (i).y += y
        c.d (i).z /= z
    end for
    c.center.x += x
    c.center.y += y
    c.center.z /= z
end movecube
procedure draw3dline (d1, d2 : dot, c : int)
    drawline (round (d1.x / d1.z), round (d1.y / d1.z), round (d2.x / d2.z), round (d2.y / d2.z), c)
end draw3dline
procedure drawcube (var c : cube, col : int)
    draw3dline (c.d (1), c.d (2), col)
    draw3dline (c.d (2), c.d (3), col)
    draw3dline (c.d (3), c.d (4), col)
    draw3dline (c.d (4), c.d (1), col)
    draw3dline (c.d (5), c.d (6), col)
    draw3dline (c.d (6), c.d (7), col)
    draw3dline (c.d (7), c.d (8), col)
    draw3dline (c.d (8), c.d (5), col)
    draw3dline (c.d (1), c.d (5), col)
    draw3dline (c.d (2), c.d (6), col)
    draw3dline (c.d (3), c.d (7), col)
    draw3dline (c.d (4), c.d (8), col)
end drawcube
procedure rotatecubexy (var c : cube, d : real)
    for i : 1 .. 8
        rotate (c.center.x, c.center.y, c.d (i).x, c.d (i).y, d)
    end for
end rotatecubexy
procedure rotatecubexz (var c : cube, d : real)
    for i : 1 .. 8
        rotate (c.center.x, c.center.z, c.d (i).x, c.d (i).z, d)
    end for
end rotatecubexz
procedure rotatecubeyz (var c : cube, d : real)
    for i : 1 .. 8
        rotate (c.center.y, c.center.z, c.d (i).y, c.d (i).z, d)
    end for
end rotatecubeyz
procedure assign3d (var d : dot, x, y, z : real)
    d.x := x
    d.y := y
    d.z := z + 10
end assign3d
assign3d (cube1.d (1), -1, 1, -1)
assign3d (cube1.d (2), 1, 1, -1)
assign3d (cube1.d (3), 1, 1, 1)
assign3d (cube1.d (4), -1, 1, 1)
assign3d (cube1.d (5), -1, -1, -1)
assign3d (cube1.d (6), 1, -1, -1)
assign3d (cube1.d (7), 1, -1, 1)
assign3d (cube1.d (8), -1, -1, 1)
assign3d (cube1.center, cube1.d (1).x, cube1.d (1).y, cube1.d (1).z)
movecube (cube1, 10, 10, 200)
loop
    rotatecubexy (cube1, 10)
    drawcube (cube1, 9)
    delay (100)
    cls
end loop
bugzpodder




PostPosted: Sun May 25, 2003 12:00 pm   Post subject: (No subject)

Nice!
using the formulas i showed you a while back? Wink

code:
drawline (round (d1.x / d1.z), round (d1.y / d1.z), round (d2.x / d2.z), round (d2.y / d2.z), c)
Catalyst




PostPosted: Sun May 25, 2003 1:03 pm   Post subject: (No subject)

still need to rotate on 2 more axes if u want the bits
Homer_simpson




PostPosted: Sun May 25, 2003 1:12 pm   Post subject: (No subject)

ya i know...
Quote:
using the formulas i showed you a while back?

are there any other formulas?


how do i caculate the origin of my cube to be rotated on ?
Catalyst




PostPosted: Sun May 25, 2003 1:21 pm   Post subject: (No subject)

same way ud find the center of a 2d polygon
Homer_simpson




PostPosted: Sun May 25, 2003 1:33 pm   Post subject: (No subject)

how da hell do u do that?
JSBN




PostPosted: Sun May 25, 2003 1:42 pm   Post subject: (No subject)

well... I loose at this contest.....
Homer_simpson




PostPosted: Sun May 25, 2003 10:53 pm   Post subject: (No subject)

whooooooohooooooooo!!!!
i did it(still have some bugs tho
code:
const norm := 1000
procedure rotate (OriginX, OriginY : real, var secondpartX, secondpartY : real, Rotaion : real)
    var tempx := (((OriginX - secondpartX) * cosd (Rotaion)) + ((OriginY - secondpartY) * sind (Rotaion)))
    var tempy := (((OriginY - secondpartY) * cosd (Rotaion)) - ((OriginX - secondpartX) * sind (Rotaion)))
    secondpartY := OriginY - tempy
    secondpartX := OriginX - tempx
end rotate
type dot :
    record
        x, y, z : real
        xD, yD : int
    end record
type cube :
    record
        d : array 1 .. 10 of dot
        center : dot
    end record
var cube1 : cube
procedure movecube (var c : cube, x, y, z : real)
    for i : 1 .. 8
        c.d (i).x += x
        c.d (i).y += y
        c.d (i).z += z
    end for
    c.center.x += x
    c.center.y += y
    c.center.z += z
end movecube
procedure assign3d (var d : dot, x, y, z : real)
    d.x := x
    d.y := y
    d.z := z + 10
end assign3d
procedure draw3dline (d1, d2 : dot, c : int)
    drawline (round (d1.x / (d1.z / norm)) + 320, round (d1.y / (d1.z / norm)) + 200, round (d2.x / (d2.z / norm)) + 320, round (d2.y / (d2.z / norm)) + 200, c)
end draw3dline
procedure drawcube (var c : cube, col : int)
    assign3d (cube1.center, cube1.d (1).x, cube1.d (1).y, cube1.d (1).z)
    draw3dline (c.d (1), c.d (2), col)
    draw3dline (c.d (2), c.d (3), col)
    draw3dline (c.d (3), c.d (4), col)
    draw3dline (c.d (4), c.d (1), col)
    draw3dline (c.d (5), c.d (6), col)
    draw3dline (c.d (6), c.d (7), col)
    draw3dline (c.d (7), c.d (8), col)
    draw3dline (c.d (8), c.d (5), col)
    draw3dline (c.d (1), c.d (5), col)
    draw3dline (c.d (2), c.d (6), col)
    draw3dline (c.d (3), c.d (7), col)
    draw3dline (c.d (4), c.d (8), col)
end drawcube
procedure rotatecubexy (var c : cube, d : real)
    for i : 1 .. 8
        rotate (c.center.x, c.center.y, c.d (i).x, c.d (i).y, d)
    end for
end rotatecubexy
procedure rotatecubexz (var c : cube, d : real)
    for i : 1 .. 8
        rotate (c.center.x, c.center.z, c.d (i).x, c.d (i).z, d)
    end for
end rotatecubexz
procedure rotatecubeyz (var c : cube, d : real)
    for i : 1 .. 8
        rotate (c.center.y, c.center.z, c.d (i).y, c.d (i).z, d)
    end for
end rotatecubeyz
assign3d (cube1.d (1), -10, 10, -10)
assign3d (cube1.d (2), 10, 10, -10)
assign3d (cube1.d (3), 10, 10, 10)
assign3d (cube1.d (4), -10, 10, 10)
assign3d (cube1.d (5), -10, -10, -10)
assign3d (cube1.d (6), 10, -10, -10)
assign3d (cube1.d (7), 10, -10, 10)
assign3d (cube1.d (8), -10, -10, 10)
%assign3d (cube1.center, cube1.d (1).x + 1, cube1.d (1).y - 1, cube1.d (1).z + 1)
assign3d (cube1.center, cube1.d (1).x, cube1.d (1).y, cube1.d (1).z)

movecube (cube1, 10, 10, 200)
loop
    if hasch then
        cls
        case getchar of
            label "a" :
                rotatecubexy (cube1, 1)
            label "s" :
                rotatecubexz (cube1, 1)
            label "d" :
                rotatecubeyz (cube1, 1)
            label "q" :
                rotatecubexy (cube1, -1)
            label "w" :
                rotatecubexz (cube1, -1)
            label "e" :
                rotatecubeyz (cube1, -1)
            label :
        end case
    end if
    drawcube (cube1, 9)
end loop

I'll be fixing the bugs shortly
controls are a,s,d,q,w,e
JSBN




PostPosted: Sun May 25, 2003 10:56 pm   Post subject: (No subject)

nice, very nice
+15 bits
Display posts from previous:   
   Index -> Contests
View previous topic Tell A FriendPrintable versionDownload TopicSubscribe to this topicPrivate MessagesRefresh page View next topic

Page 1 of 2  [ 28 Posts ]
Goto page 1, 2  Next
Jump to:   


Style:  
Search: