11-12-2005, 01:09 AM
its not too complicated, so dont get your hopes too high, but i like it.
Code:
DECLARE SUB rotpt (x1!, y1!, z1!, rotx!, roty!, rotz!, nx!, ny!, nz!)
DECLARE FUNCTION dstc(x1!,y1!,x2!,y2!,d!) AS BYTE
CONST pi = 3.14159 / 180
DIM AS SINGLE x,y,z,thetax,thetay,thetaz, c,ox,oy,bx,by,bz,cx,cy,tm
DIM AS INTEGER sc(639*479+1),mousex,mousey,garbage
RANDOMIZE TIMER
SCREENRES 640,480,32,2
SCREENSET 1,0
ox = 320
oy = 240
cx = -5
cy = -8
tm = TIMER + .03
DO
FOR thetax = 0 TO 180 STEP 36
FOR thetay = 0 TO 360 STEP 6
rotpt (0,0,125,thetay,thetax+90+thetaz,thetaz+90,x,z,y)
c = (y+128) SHL 16
LINE (ox-x-1,oy-z-1)-(ox-x+1,oy-z+1),c, bf
rotpt (0,0,225,-thetay,-thetax+90-thetaz,-thetaz+90,bx,bz,by)
c = ((y*.55)+128)
LINE (319-bx,239-bz)-(321-bx,241-bz),c, bf
NEXT
NEXT
SCREENCOPY 1,0
GET (0,0)-(638,478),sc
CLS
DO:LOOP UNTIL TIMER >= tm
tm = TIMER + .03
PUT(1,1),sc,alpha,225
LINE(0,0)-(639,0),0
LINE(0,0)-(0,479),0
thetaz +=2
ox += cx
IF ox < 125 OR ox > 514 THEN cx = -cx
oy += cy
IF oy < 125 OR oy > 354 THEN cy = -cy
LOOP UNTIL MULTIKEY(1)
END
SUB rotpt (x1!, y1!, z1!, rotx!, roty!, rotz!, nx!, ny!, nz!)
DIM AS SINGLE rx,ry,rz
rx = rotx!
ry = roty!
rz = rotz!
'xrot
nx1! = x1!
ny1! = z1! * SIN(pi * rx) + y1! * COS(pi * rx)
nz1! = z1! * COS(pi * rx) - y1! * SIN(pi * rx)
'yrot
nx2! = nx1! * COS(pi * ry) - nz1! * SIN(pi * ry)
ny2! = ny1!
nz2! = nx1! * SIN(pi * ry) + nz1! * COS(pi * ry)
'zrot
nx! = nx2! * COS(pi * rz) - ny2! * SIN(pi * rz)
ny! = nx2! * SIN(pi * rz) + ny2! * COS(pi * rz)
nz! = nz2!
END SUB
FUNCTION dstc(x1!,y1!,x2!,y2!,d!) AS BYTE
IF SQR((x1!-x2!)*(x1!-x2!)+(y1!-y2!)*(y1!-y2!)) > d! THEN RETURN -1 ELSE RETURN 0
END FUNCTION