REM Project: Vector_Quad
REM Created: 13.1.2007 16:17:21
REM Author:
Mark Garrett aka 'bubba'
REM ***** Main Source File *****
REM
global r5:global g5: global b5
global dim x(4000)
global dim y(4000)
global dim r(4000)
global dim g(4000)
global dim b(4000)
global n1
global n2
set display mode 1024,768,16
sync on:sync rate 0
`------------------------ set up primary colors:
dim culur(6)
culur(1) = rgb(255,0,0):culur(2) = rgb(0,255,0):culur(3) = rgb(0,0,255)
culur(4)
= rgb(255,255,0):culur(5) = rgb(0,255,255):culur(6) = rgb(255,0,255)
for m = 1 to 20
lock pixels
cc = rnd(5)+1 :color1 = culur(cc)
cc1: cc = rnd(5)+1 :color2 = culur(cc)
if
color2 = color1 then goto cc1
cc2: cc = rnd(5)+1 :color3 = culur(cc)
if color3 = color1 or color3 = color2 then goto
cc2
cc3: cc = rnd(5)+1 :color4 = culur(cc)
if color4 = color1 or color4 = color2 or color4 = color3 then goto cc3
Quad(rnd(400),rnd(350),color1,rnd(300)+700,rnd(300),color2,rnd(300)+700,rnd(300)+400,color3,rnd(400),rnd(300)+400,color4)
`Quad(10,10,color1,500,10,color2,400,400,color3,20,600,color4)
unlock pixels:sync
next m
ink rgb(0,255,255),0
text 10,10," To save a j-peg
file press the right mouse button. "
text 10,25," to exit press the left mouse button." :sync
wait mouse `observe results
if mouseclick() = 2
get image 1,0,0,1023,767,1: save image "Gouraud_Quads.jpg",1 :wait 5000
endif
end
`exit
`&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
function Quad(x11,y11,color11,x22,y22,color22,x33,y33,color33,x44,y44,color44)
global
n
global r5:global g5: global b5
global dim x(4000)
global dim y(4000)
global dim r(4000)
global dim g(4000)
global dim b(4000)
global n1
global n2
`------------- get x_mid,y_mid
---------------------------
Point1 = (x11 + x22)/2: Point2 = (x22 + x33)/2: Point3 = (x33+x44)/2 : Point4 = (x44+x11)/2
x_MID = (Point1 + Point2 + Point3 + Point4)/4
Point1 = (y11 + y22)/2: Point2 = (y22 + y33)/2: Point3 = (y33+y44)/2
: Point4 = (y44+y11)/2
y_MID = (Point1 + Point2 + Point3 + Point4)/4
`text x11,y11, "1" :text x22,y22, "2":text x33,y33, "3" :text
x44,y44, "4"
`----------------------------------------------------------
`
x1 as float:x2 as float:y1 as float:y2
as float:c1 as float:c2 as float
x1 = x11:y1 = y11:x2 = x22:y2 = y22
c1 = color11:c2 = color22 :gosub
Poke_a_Side `: mid_side_1 = long_span/2
co2 = n `(corner 2)
x1 = x22:y1 = y22:x2 = x33:y2 = y33
c1 = color22:c2 = color33 :
gosub Poke_a_Side
co3 = n
x1 = x33:y1 = y33:x2 = x44:y2 = y44
c1 = color33:c2 = color44 :
gosub Poke_a_Side
co4 = n
x1 = x44:y1 = y44:x2 = x11:y2 = y11
c1 = color44:c2 = color11 :
gosub Poke_a_Side
co1 = n
goto draw_vertices
Poke_a_Side:
`-----------------get add----xy's -and largest-span
spany as float:
spanx as float:addx as float:addy as float:long_span as float
`- - - - - - - - - -
spanx = abs(x2-x1)
spany
= abs(y2-y1)
if spany>=spanx then long_span = spany
if spanx>=spany then long_span
= spanx
addy = (y2-y1)/long_span
addx = (x2-x1)/long_span
`-----------------get add---rgb's
r1 as float:g1 as float:b1 as float:r2
as float:g2 as float:b2 as float
rspan as float:gspan as float:bspan as float
addr as float:addg as float:addb as float
`-
- - - - - - - - - -
r1 = rgbr(c1):g1 = rgbg(c1):b1 = rgbb(c1)
r2 = rgbr(c2):g2 = rgbg(c2):b2 = rgbb(c2)
addr = (r2-r1)/long_span
addg = (g2-g1)/long_span
addb = (b2-b1)/long_span
`---------------poke-a-side-of-the-quad-
for t = 1 to long_span
x1 = x1 + addx: x(n) = x1
y1 = y1 + addy: y(n) = y1
last_y1 = y1:last_x1 = x1
r1 = r1 + addr: r(n) = r1
g1 = g1 + addg: g(n) = g1
b1 = b1 + addb:
b(n) = b1
cont:
ink rgb(r1,g1,b1),0 : dot x1,y1
`print x1, y1
inc n
next
t
RETURN
`
DRAW vertices
`MMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
`MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
`----------------------------
draw vertices----------------------
draw_vertices:
if y11 <= y22 and y11 <= y33
and y11 <= y44 then Hi_y = co1
if y22 <= y11 and y22 <= y33
and y22 <= y44 then Hi_y = co2
if y33 <= y11 and y33 <= y22
and y33 <= y44 then Hi_y = co3
if y44 <= y11 and y44 <= y22
and y44 <= y33 then Hi_y = co4
if y11 >= y22 and y11 >= y33
and y11 >= y44 then Lo_y = co1
if y22 >= y11 and y22 >= y33
and y22 >= y44 then Lo_y = co2
if y33 >= y11 and y33 >= y22
and y33 >= y44 then Lo_y = co3
if y44 >= y11 and y44 >= y22
and y44 >= y33 then Lo_y = co4
n1 = Hi_y : n2 = Hi_y
beggin_LOOP:
n1 = I(n1,1)
n2 = D(n2,1)
n1y = y(n1)
n2y = y(n2)
if n2y > n1y then n2 = I(n2,1): goto beggin_LOOP
if n1y >
n2y then n1 = D(n1,1): goto beggin_LOOP
if y(n2) = y(Lo_y)
undim x(0): undim y(0): undim r(0): undim g(0)
undim b(0): exitfunction
endif
gosub Poke_a_line
goto beggin_LOOP
`++++++++++++++++++++++++++++ POKE A LINE ++++++++++++++++++++++++++++++++++++
`++++++++++++++++++++++++++++
POKE A LINE ++++++++++++++++++++++++++++++++++++
`++++++++++++++++++++++++++++ POKE A LINE ++++++++++++++++++++++++++++++++++++
Poke_a_line:
`-----------------get add----xy's -and largest-span
`- - - - - - - - - -
spanx = abs(x(n2)-x(n1))
spany =
abs(y(n2)-y(n1))
if spany>=spanx then long_span = spany
if spanx>=spany then long_span
= spanx
addy = (y(n1)-y(n2))/long_span
y2 = y(n2) ` for poking
the dots
addx = (x(n1)-x(n2))/long_span
x2 = x(n2)
r1 = r(n1):g1 = g(n1):b1 = b(n1)
r2 = r(n2):g2 = g(n2):b2 = b(n2)
addr = (r1-r2)/long_span
addg = (g1-g2)/long_span
addb = (b1-b2)/long_span
`----------------prepare-storage-space
`---------------
for tu = 1 to long_span-1
`inc n
x2 = x2 + addx
y2 = y2 + addy
r2 = r2 + addr
g2 = g2 + addg
b2 = b2 + addb
ink rgb(r2,g2,b2),0
dot x2,y2
dot x2,y2+1
dot x2+1,y2 `:dot
x2-1,y2
`line x(n2),y(n2),x(n1),y(n1)
next tu
RETURN
`print " ": print " "
`print x(n2)," ",y(n2),"
", x(n1)," ",y(n1)
`print "Hi_y ", Hi_y
`print "n1 ",n1, " n2 ", n2
`print
"n ",n
`print "co1 ",co1
`print "co2 ",co2
`print "co3 ",co3
`print "co4 ",co4
`print
"D(co4,1) ",D(c4,1)
`print "Hi_y ",Hi_y
`print "y(Hi_y) ",y(Hi_y)
`exitfunction
endfunction
`
SUPPORTING FUNCTIONS
`&&&&&&&&&&&&&&&&&&&&&&&&&&&&
FUNCTIONS &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
`&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
`&&&&&&&&&&&&&&&&&&&&&&&&
INC &&&&&&&&&&&&&&&&&&&&&&&&&&&
function I(value as integer,times)
for t = 1 to times
if value+1 > n then value = 0
inc value
next
t
endfunction value
`&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
`&&&&&&&&&&&&&&&&&&&&&&&&&&
DEC &&&&&&&&&&&&&&&&&&&&&&&&&
function D(value,times)
for t = 1 to times
if value - 1 < 1 then value = n
dec value
next
t
endfunction value
`&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
`&&&&&&&&&&&&&&&&&&&&&&&&&&&
INT_ &&&&&&&&&&&&&&&&&&&&&
function
int_(value as float)
a# = int(value+1): a# = a# - value
b# = int(value) : b# = value - b#
if a# > b# then true_intuger_value = int(value)
if b# > a# then
true_intuger_value = int(value+1)
if b# = a# then true_intuger_value = int(value+1)
endfunction true_intuger_value
`&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
`&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&