62 lines
1.7 KiB
Plaintext
Executable File
62 lines
1.7 KiB
Plaintext
Executable File
#!yab
|
|
doc Draw some nice 3D curves
|
|
doc Original by Martin Lehmann for QBasic
|
|
doc
|
|
doc change the function func for different curves
|
|
doc try smaller values of i for a lower resolution
|
|
doc try z = 1 for less dots
|
|
doc
|
|
doc Note: this demo shows one thing: yab is slow :)
|
|
doc The cleanup of the drawing takes alot of time too,
|
|
doc you can simply break the program if you don't want to wait
|
|
doc
|
|
|
|
window open 100,100 to 739,579, "Win", "3D Curve"
|
|
|
|
bitmap 640,480, "DoubleBuffer"
|
|
canvas 0,0 to 639,479, "MyCanvas", "Win"
|
|
|
|
i = 128 // resolution
|
|
z = 0.5 // dot frequency
|
|
xk = 40
|
|
yk = 30
|
|
|
|
draw set "highcolor", 0,0,0, "DoubleBuffer"
|
|
draw rect 0,0 to 639,479, "DoubleBuffer"
|
|
draw bitmap 0,0, "DoubleBuffer", "copy", "MyCanvas"
|
|
|
|
for t = -144 to 144 step(288/i)
|
|
if(t=0) t=0.1
|
|
r = int(0.5 + sqrt(20736 - t^2))
|
|
for j = -r to r step z
|
|
p = func(sqrt(j^2 + t^2) * 0.0327) * 20
|
|
x = int(1.7 * (j + (t/2.25) + 160)) + xk
|
|
y = int(1.8 * (199 - (p - t/2.25 + 90))) + yk
|
|
draw set "highcolor", 255-r,j+r,255-p, "DoubleBuffer"
|
|
draw line x,y to x,y, "DoubleBuffer"
|
|
draw set "highcolor", 0,0,0, "DoubleBuffer"
|
|
draw line x,y+1 to x,480, "DoubleBuffer"
|
|
next j
|
|
draw bitmap 0,0, "DoubleBuffer", "copy", "MyCanvas"
|
|
next t
|
|
|
|
while(not instr(message$, "Quit"))
|
|
wend
|
|
|
|
window close "Win"
|
|
|
|
// Choose one of the functions below, comment out all others
|
|
sub func(n)
|
|
// return cos(n) + cos(2*n) +cos(5*n)
|
|
// return -abs(1/n)
|
|
// return -abs(1/(n + j))
|
|
// return sin(n) + sin(2*n) +sin(5*n)
|
|
// return cos(sin(n))
|
|
return cos(2*n) + cos((n+j)/16)
|
|
// return sqrt(abs(0.5*(16 - n^2))) + 1/(n*4)
|
|
// return cos(4*n) + 20/(n^2 + 3)
|
|
// return cos(1/n) + cos(2/n) + cos(5/n) - 3
|
|
// return cos(sin(j/n))
|
|
// return 1/sqrt(n) - 3
|
|
end sub
|