Post by bluatigro on Aug 30, 2019 7:18:18 GMT -5
this is a test for drawing speed
and calculation speed
it does not do what i expect
it shoot do :
draw 6 cubes rotating
and calculation speed
it does not do what i expect
it shoot do :
draw 6 cubes rotating
WindowWidth = DisplayWidth
WindowHeight = DisplayHeight
global winx , winy , pi
winx = WindowWidth
winy = WindowHeight
pi = atn( 1 ) * 4
nomainwin
global xyz , xzy , yxz , yzx , zxy , zyx
xyz = 0
xzy = 1
yxz = 2
yzx = 3
zxy = 4
zyx = 5
global rotx , roty , totz , trans , temp , temp2 , angle
rotx = 21
roty = 22
rotz = 23
trans = 24
temp = 25
temp2 = 26
dim m( 26 , 3 , 3 )
open "line 3d" for graphics as #m
#m "trapclose [quit]"
timer 40 , [timer.tick]
wait
[timer.tick]
scan
#m "fill black"
call link 1 , -200 , 200 , 0 , angle , angle , angle , xyz , 0
call cube 0,0,0 , 100 , 100 , 100 , 5 , rgb( 255 , 0 , 0 )
call link 1 , 0 , 200 , 0 , angle , angle , angle , xzy , 0
call cube 0,0,0 , 100 , 100 , 100 , 5 , rgb( 0 , 255 , 0 )
call link 1 , 200 , 200 , 0 , angle , angle , angle , yxz , 0
call cube 0,0,0 , 100 , 100 , 100 , 5 , rgb( 0 , 0 , 255 )
call link 1 , -200 , -200 , 0 , angle , angle , angle , yzx , 0
call cube 0,0,0 , 100 , 100 , 100 , 5 , rgb( 0 , 255 , 255 )
call link 1 , 0 , -200 , 0 , angle , angle , angle , zxy , 0
call cube 0,0,0 , 100 , 100 , 100 , 5 , rgb( 255 , 0 , 255 )
call link 1 , 200 , -200 , 0 , angle , angle , angle , zyx , 0
call cube 0,0,0 , 100 , 100 , 100 , 5 , rgb( 255 , 255 , 0 )
angle = angle + 5
wait
[quit]
close #m
end
function rgb( r , g , b )
r = r and 255
g = g and 255
b = b and 255
rgb = r + g * 256 + b * 256 ^ 2
end function
sub setcolor kl
r = int( kl ) and 255
g = int( kl / 256 ) and 255
b = int( kl / 256 ^ 2 ) and 255
#m "color " ; r ; " " ; g ; " " ; b
end sub
sub matrix.x a , b , uit
for i = 0 to 3
for j = 0 to 3
m( uit , i , j ) = 0
for k = 0 to 3
m( uit , i , j ) = m( uit , i , j ) + m( a , i , k ) * m( b , k , j )
next k
next j
next i
end sub
sub matrix.reeks uit , a , b , c , p
call matrix.x a , b , temp
call matrix.x temp , c , temp2
call matrix.x temp2 , trans , temp
call matrix.x temp , p , uit
end sub
sub matrix.copy a , b
for i = 0 to 3
for j = 0 to 3
m( b , i , j ) = m( a , i , j )
next j
next i
end sub
sub matrix.init
for i = 0 to 3
for j = 0 to 3
m( 0 , i , j ) = 0
next j
m( 0 , i , i ) = 1
next i
end sub
sub link no , x , y , z , xz , yz , xy , ax , p
if no < 1 or no > 20 then exit sub
if p < 0 or p > 20 then exit sub
if p = no then exit sub
call matrix.init
call matrix.copy 0 , rotx
call matrix.copy 0 , roty
call matrix.copy 0 , rotz
call matrix.copy 0 , trans
m( rotx , 1 , 1 ) = cos( rad( yz ) )
m( rotx , 1 , 2 ) = sin( rad( yz ) )
m( rotx , 2 , 1 ) = 0-sin( rad( yz ) )
m( rotx , 2 , 2 ) = cos( rad( yz ) )
m( roty , 0 , 0 ) = cos( rad( xz ) )
m( roty , 0 , 2 ) = sin( rad( xz ) )
m( roty , 2 , 0 ) = 0-sin( rad( xz ) )
m( roty , 2 , 2 ) = cos( rad( xz ) )
m( rotx , 0 , 0 ) = cos( rad( xy ) )
m( rotx , 0 , 2 ) = sin( rad( xy ) )
m( rotx , 2 , 0 ) = 0-sin( rad( xy ) )
m( rotx , 2 , 2 ) = cos( rad( xy ) )
m( rotx , 3 , 0 ) = x
m( rotx , 3 , 1 ) = y
m( rotx , 3 , 2 ) = z
select case ax
case xyz
call matrix.reeks no , rotx , roty , rotz , p
case xzy
call matrix.reeks no , rotx , rotz , roty , p
case yxz
call matrix.reeks no , roty , rotx , rotz , p
case yzx
call matrix.reeks no , roty , rotz , rotx , p
case zxy
call matrix.reeks no , rotz , rotx , roty , p
case zyx
call matrix.reeks no , rotz , roty , rotx , p
case else
call matrix.reeks no , rotx , roty , rotz , p
end select
number = no
end sub
function rad( deg )
rad = deg * pi / 180
end function
sub spot byref x , byref y , byref z
hx = m( number , 0 , 0 ) * x _
+ m( number , 1 , 0 ) * y _
+ m( number , 2 , 0 ) * z _
+ m( number , 3 , 0 )
hy = m( number , 0 , 1 ) * x _
+ m( number , 1 , 1 ) * y _
+ m( number , 2 , 1 ) * z _
+ m( number , 3 , 1 )
hz = m( number , 0 , 2 ) * x _
+ m( number , 1 , 2 ) * y _
+ m( number , 2 , 2 ) * z _
+ m( number , 3 , 2 )
x = hx
y = hy
z = hz
end sub
sub line3d x1,y1,z1 , x2,y2,z2 , thik , kl
call spot x1,y1,z1
call spot x2,y2,z2
if z1 < -900 or z2 < -900 then exit sub
xa = winx / 2 + x1 / ( z1 + 1000 ) * 1000
ya = winy / 2 - y1 / ( z1 + 1000 ) * 1000
xb = winx / 2 + x2 / ( z2 + 1000 ) * 1000
yb = winy / 2 - y2 / ( z2 + 1000 ) * 1000
call setcolor kl
#m "size " ; thik
#m "down"
#m "line " ; xa ; " " ; ya ; " " ; xb ; " " ; yb
#m "up"
end sub
sub cube mx,my,mz , dx,dy,dz , thik , kl
call line3d mx+dx,my+dy,mz+dz , mx-dx,my+dy,mz+dz , thik , kl
call line3d mx+dx,my+dy,mz-dz , mx-dx,my+dy,mz-dz , thik , kl
call line3d mx+dx,my-dy,mz+dz , mx-dx,my-dy,mz+dz , thik , kl
call line3d mx+dx,my-dy,mz-dz , mx-dx,my-dy,mz-dz , thik , kl
call line3d mx+dx,my+dy,mz+dz , mx+dx,my-dy,mz+dz , thik , kl
call line3d mx+dx,my+dy,mz-dz , mx+dx,my-dy,mz-dz , thik , kl
call line3d mx-dx,my+dy,mz+dz , mx-dx,my-dy,mz+dz , thik , kl
call line3d mx-dx,my+dy,mz-dz , mx-dx,my-dy,mz-dz , thik , kl
call line3d mx+dx,my+dy,mz+dz , mx+dx,my+dy,mz-dz , thik , kl
call line3d mx+dx,my-dy,mz+dz , mx+dx,my-dy,mz-dz , thik , kl
call line3d mx-dx,my+dy,mz+dz , mx-dx,my+dy,mz-dz , thik , kl
call line3d mx-dx,my-dy,mz+dz , mx-dx,my-dy,mz-dz , thik , kl
end subWindowWidth = DisplayWidth
WindowHeight = DisplayHeight
global winx , winy , pi
winx = WindowWidth
winy = WindowHeight
pi = atn( 1 ) * 4
nomainwin
global xyz , xzy , yxz , yzx , zxy , zyx
xyz = 0
xzy = 1
yxz = 2
yzx = 3
zxy = 4
zyx = 5
global rotx , roty , totz , trans , temp , temp2 , angle
rotx = 21
roty = 22
rotz = 23
trans = 24
temp = 25
temp2 = 26
dim m( 26 , 3 , 3 )
open "line 3d" for graphics as #m
#m "trapclose [quit]"
timer 40 , [timer.tick]
wait
[timer.tick]
scan
#m "fill black"
call link 1 , -200 , 200 , 0 , angle , angle , angle , xyz , 0
call cube 0,0,0 , 100 , 100 , 100 , 5 , rgb( 255 , 0 , 0 )
call link 1 , 0 , 200 , 0 , angle , angle , angle , xzy , 0
call cube 0,0,0 , 100 , 100 , 100 , 5 , rgb( 0 , 255 , 0 )
call link 1 , 200 , 200 , 0 , angle , angle , angle , yxz , 0
call cube 0,0,0 , 100 , 100 , 100 , 5 , rgb( 0 , 0 , 255 )
call link 1 , -200 , -200 , 0 , angle , angle , angle , yzx , 0
call cube 0,0,0 , 100 , 100 , 100 , 5 , rgb( 0 , 255 , 255 )
call link 1 , 0 , -200 , 0 , angle , angle , angle , zxy , 0
call cube 0,0,0 , 100 , 100 , 100 , 5 , rgb( 255 , 0 , 255 )
call link 1 , 200 , -200 , 0 , angle , angle , angle , zyx , 0
call cube 0,0,0 , 100 , 100 , 100 , 5 , rgb( 255 , 255 , 0 )
angle = angle + 5
wait
[quit]
close #m
end
function rgb( r , g , b )
r = r and 255
g = g and 255
b = b and 255
rgb = r + g * 256 + b * 256 ^ 2
end function
sub setcolor kl
r = int( kl ) and 255
g = int( kl / 256 ) and 255
b = int( kl / 256 ^ 2 ) and 255
#m "color " ; r ; " " ; g ; " " ; b
end sub
sub matrix.x a , b , uit
for i = 0 to 3
for j = 0 to 3
m( uit , i , j ) = 0
for k = 0 to 3
m( uit , i , j ) = m( uit , i , j ) + m( a , i , k ) * m( b , k , j )
next k
next j
next i
end sub
sub matrix.reeks uit , a , b , c , p
call matrix.x a , b , temp
call matrix.x temp , c , temp2
call matrix.x temp2 , trans , temp
call matrix.x temp , p , uit
end sub
sub matrix.copy a , b
for i = 0 to 3
for j = 0 to 3
m( b , i , j ) = m( a , i , j )
next j
next i
end sub
sub matrix.init
for i = 0 to 3
for j = 0 to 3
m( 0 , i , j ) = 0
next j
m( 0 , i , i ) = 1
next i
end sub
sub link no , x , y , z , xz , yz , xy , ax , p
if no < 1 or no > 20 then exit sub
if p < 0 or p > 20 then exit sub
if p = no then exit sub
call matrix.init
call matrix.copy 0 , rotx
call matrix.copy 0 , roty
call matrix.copy 0 , rotz
call matrix.copy 0 , trans
m( rotx , 1 , 1 ) = cos( rad( yz ) )
m( rotx , 1 , 2 ) = sin( rad( yz ) )
m( rotx , 2 , 1 ) = 0-sin( rad( yz ) )
m( rotx , 2 , 2 ) = cos( rad( yz ) )
m( roty , 0 , 0 ) = cos( rad( xz ) )
m( roty , 0 , 2 ) = sin( rad( xz ) )
m( roty , 2 , 0 ) = 0-sin( rad( xz ) )
m( roty , 2 , 2 ) = cos( rad( xz ) )
m( rotx , 0 , 0 ) = cos( rad( xy ) )
m( rotx , 0 , 2 ) = sin( rad( xy ) )
m( rotx , 2 , 0 ) = 0-sin( rad( xy ) )
m( rotx , 2 , 2 ) = cos( rad( xy ) )
m( rotx , 3 , 0 ) = x
m( rotx , 3 , 1 ) = y
m( rotx , 3 , 2 ) = z
select case ax
case xyz
call matrix.reeks no , rotx , roty , rotz , p
case xzy
call matrix.reeks no , rotx , rotz , roty , p
case yxz
call matrix.reeks no , roty , rotx , rotz , p
case yzx
call matrix.reeks no , roty , rotz , rotx , p
case zxy
call matrix.reeks no , rotz , rotx , roty , p
case zyx
call matrix.reeks no , rotz , roty , rotx , p
case else
call matrix.reeks no , rotx , roty , rotz , p
end select
number = no
end sub
function rad( deg )
rad = deg * pi / 180
end function
sub spot byref x , byref y , byref z
hx = m( number , 0 , 0 ) * x _
+ m( number , 1 , 0 ) * y _
+ m( number , 2 , 0 ) * z _
+ m( number , 3 , 0 )
hy = m( number , 0 , 1 ) * x _
+ m( number , 1 , 1 ) * y _
+ m( number , 2 , 1 ) * z _
+ m( number , 3 , 1 )
hz = m( number , 0 , 2 ) * x _
+ m( number , 1 , 2 ) * y _
+ m( number , 2 , 2 ) * z _
+ m( number , 3 , 2 )
x = hx
y = hy
z = hz
end sub
sub line3d x1,y1,z1 , x2,y2,z2 , thik , kl
call spot x1,y1,z1
call spot x2,y2,z2
if z1 < -900 or z2 < -900 then exit sub
xa = winx / 2 + x1 / ( z1 + 1000 ) * 1000
ya = winy / 2 - y1 / ( z1 + 1000 ) * 1000
xb = winx / 2 + x2 / ( z2 + 1000 ) * 1000
yb = winy / 2 - y2 / ( z2 + 1000 ) * 1000
call setcolor kl
#m "size " ; thik
#m "down"
#m "line " ; xa ; " " ; ya ; " " ; xb ; " " ; yb
#m "up"
end sub
sub cube mx,my,mz , dx,dy,dz , thik , kl
call line3d mx+dx,my+dy,mz+dz , mx-dx,my+dy,mz+dz , thik , kl
call line3d mx+dx,my+dy,mz-dz , mx-dx,my+dy,mz-dz , thik , kl
call line3d mx+dx,my-dy,mz+dz , mx-dx,my-dy,mz+dz , thik , kl
call line3d mx+dx,my-dy,mz-dz , mx-dx,my-dy,mz-dz , thik , kl
call line3d mx+dx,my+dy,mz+dz , mx+dx,my-dy,mz+dz , thik , kl
call line3d mx+dx,my+dy,mz-dz , mx+dx,my-dy,mz-dz , thik , kl
call line3d mx-dx,my+dy,mz+dz , mx-dx,my-dy,mz+dz , thik , kl
call line3d mx-dx,my+dy,mz-dz , mx-dx,my-dy,mz-dz , thik , kl
call line3d mx+dx,my+dy,mz+dz , mx+dx,my+dy,mz-dz , thik , kl
call line3d mx+dx,my-dy,mz+dz , mx+dx,my-dy,mz-dz , thik , kl
call line3d mx-dx,my+dy,mz+dz , mx-dx,my+dy,mz-dz , thik , kl
call line3d mx-dx,my-dy,mz+dz , mx-dx,my-dy,mz-dz , thik , kl
end sub