ESHER

Algemene discussies en vragen omtrent Liberty BASIC programma's. Stuur zoveel mogelijk delen van listings (snippets) in als je hulp wilt.

Moderators: anthonio, Abcott

ESHER

Berichtdoor bluatigro » ma maart 01, 2010 12:45 pm

esher was een bekende nederlands artiest
die veel [ on ] mogelijke vormen maakte
google esher in afbeeldingen en zie zelf

deze vorm heb ik verzonnen met zijn werk in gedachten

Code: Selecteer alles
WindowWidth = DisplayWidth
WindowHeight = DisplayHeight
global WinX , WinY
WinX = WindowWidth
WinY = Windowheight
global height , pi
global black , red , green , yellow
global blue , magenta , cyan , white
global pink , purple , gray , orange
pi = atn( 1 ) * 4
black   = rgb(   0 ,   0 ,   0 )
red     = rgb( 255 ,   0 ,   0 )
green   = rgb(   0 , 255 ,   0 )
yellow  = rgb( 255 , 255 ,   0 )
blue    = rgb(   0 ,   0 , 255 )
magenta = rgb( 255 ,   0 , 255 )
cyan    = rgb(   0 , 255 , 255 )
white   = rgb( 255 , 255 , 255 )
pink    = rgb( 255 , 127 , 127 )
orange  = rgb( 255 , 127 ,   0 )
gray    = rgb( 127 , 127 , 127 )
purple  = rgb( 127 ,   0 , 127 )
nomainwin
open "3D Ring" for graphics as #m
  #m "trapclose [quit]"
  call ring -200 , 300 , 60 , 60 , 20 , green
  call ring 0 , 300 , 60 , 60 , 20 , red
  call ring 200 , 300 , 60 , 60 , 20 , blue
  #m "flush"
wait
sub ring mx , my , dx , dy , d , clr
  for i = 0 to 90 step 90 / ( dx + dy )
    x = sin( rad( i ) )
    y = cos( rad( i ) )
    kl = mix( clr , 0 - i / 90 , black )
    r = int( kl and 255 )
    g = int( kl / 256 ) and 255
    b = int( kl / 256 / 256 ) and 255
    #m "backcolor " ; r ;" "; g ;" "; b
    #m "color " ; r ; " " ; g ; " " ; b
    #m "down"
    #m "line " ; x * dx + WinX / 2 + mx ; " " _
    ; y * dy + WinY / 2 + my ; " " _
    ; x * dx + WinX / 2 + d + mx ; " " _
    ; y * dy + WinY / 2 + my
    #m "up"
    #m "down"
    #m "line " ; x * ( dx - d ) + WinX / 2 + mx ; " " _
    ; WinY / 2 - y * ( dy - d ) + my ; " " _
    ; x * ( dx - d ) + WinX / 2 + d + mx ; " " _
    ; WinY / 2 -y * ( dy - d ) + my
    #m "up"
    kl = mix( clr , 0 - i / 90 , white)
    r = int( kl and 255 )
    g = int( kl / 256 ) and 255
    b = int( kl / 256 / 256 ) and 255
    #m "backcolor " ; r ;" "; g ;" "; b
    #m "color " ; r ; " " ; g ; " " ; b
    #m "down"
    #m "line " ; WinX / 2 - x * ( dx - d ) + mx ; " " _
    ; WinY / 2 + y * ( dy - d ) + my ; " " _
    ; WinX / 2 - x * ( dx - d ) + d + mx ; " " _
    ; WinY / 2 + y * ( dy - d ) + my
    #m "up"
    #m "down"
    #m "line " ; WinX / 2 - x * dx + mx ; " " _
    ; WinY / 2 - y * dy + my ; " " _
    ; WinX / 2 - x * dx + d + mx ; " " _
    ; WinY / 2 - y * dy + my
    #m "up"
  next i
  for i = 0 to d
    call arc WinX / 2 + mx , WinY / 2 + my , dx - i , dy - i _
    , -90 , 90 , clr
    call arc WinX / 2 + d +mx, WinY / 2 +my, dx - i , dy - i , 90 , 270 , clr
  next i
end sub
function rad( x )
  rad = x * pi / 180
end function
sub arc mx , my , dx , dy , b , e , kl
  for i = b to e step 50 / ( dx + dy )
    x = sin( rad( i ) ) * dx + mx
    y = cos( rad( i ) ) * dy + my
    r = int( kl and 255 )
    g = int( kl / 256 ) and 255
    b = int( kl / 256 / 256 ) and 255
    #m "backcolor " ; r ;" "; g ;" "; b
    #m "color " ; r ; " " ; g ; " " ; b
    #m "down"
    #m "set " ; x ; " " ; y
    #m "up"
  next i
end sub
sub sphere x , y , z , d , kl
  if abs( height - y ) < d then
    dd = sqr( d ^ 2 - ( height - y ) ^ 2 ) * 2
    kl = mix( kl , 1 - ( height - y ) / d / 2 + 0.5 , 0 )
    r = int( kl and 255 )
    g = int( kl / 256 ) and 255
    b = int( kl / 256 / 256 ) and 255
    dx = WindowWidth
    dy = WindowHeight
    print #m , "backcolor " ; r ;" "; g ;" "; b
    print #m , "color " ; r ; " " ; g ; " " ; b
    print #m , "goto "; dx / 2 + x ;" " _
    ; dy * 5 / 6 - height - z / 4
    print #m , "down"
    print #m , "ellipsefilled "; dd ;" "; dd / 4
    print #m , "up"
  end if
''  if hoog = 0 then
''    print #m , "backcolor black"
''    print #m , "color black"
''    print #m , "goto " ; dx / 2 + x ; " " _
''    ; dy * 5 / 6 - z / 4
''    print #m , "down"
''    print #m , "ellipsefilled " ; d * 2 ; " " ; d / 2
''    print #m , "up"
''  end if
end sub
sub egg x1 , y1 , z1 , d1 , k1 , x2 , y2 , z2 , d2 , k2 , dm
  diff = sqr( ( x1 - x2 ) ^ 2 _
            + ( y1 - y2 ) ^ 2 _
            + ( z1 - z2 ) ^ 2 )
  dx = ( x2 - x1 ) / diff
  dy = ( y2 - y1 ) / diff
  dz = ( z2 - z1 ) / diff
  dd = ( d2 - d1 ) / diff
  if dm = 0 then dm = ( d1 + d2 ) / 2
  for i = 0 to diff
    kl = mix( k1 , 1 - i / diff , k2 )
    call sphere x1 + dx * i _
    , y1 + dy * i _
    , z1 + dz * i _
    , d1 + dd * i _
    + sin( i / diff * pi ) _
    * ( dm - ( d1 + d2 ) / 2 ) _
    , kl
  next i
end sub
function rgb( r , g , b )
  rgb = ( r and 255 ) _
  + ( g and 255 ) * 256 _
  + ( b and 255 ) * 256 * 256
end function
function mix( kl1 , f , kl2 )
  r1 = int( kl1 and 255 )
  g1 = int( kl1 / 256 ) and 255
  b1 = int( kl1 / 256 / 256 ) and 255
  r2 = int( kl2 and 255 )
  g2 = int( kl2 / 256 ) and 255
  b2 = int( kl2 / 256 / 256 ) and 255
  dr = r2 - r1
  dg = g2 - g1
  db = b2 - b1
  dr = dr * f
  dg = dg * f
  db = db * f
  r = r1 + dr
  g = g1 + dg
  b = b1 + db
  mix = rgb( r and 255 , g and 255 , b and 255 )
end function
[quit]
  close #m
end
bluatigro
 
Berichten: 80
Geregistreerd op: za sep 27, 2008 6:01 pm

Re: ESHER

Berichtdoor tkpatric » di maart 16, 2010 9:08 pm

Knap! Zelf heb ik altijd moeite met wiskunde... :?
tkpatric
 
Berichten: 16
Geregistreerd op: vr dec 29, 2006 8:52 pm


Keer terug naar Liberty BASIC Code

Wie is er online

Gebruikers op dit forum: MSN [Bot] en 1 gast

cron