Code archives/3D Graphics - Effects/Lorenz 3D
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
| This is a port of the fractal created by meteorologist Lorenz. Whereas the image has previously been drawn in only 2 dimensions due to lack of a 3rd, this version lets you see the fractal the way it's meant to be seen! Use the controls as described... I recommend downloading this ZIP file [59K] with its custom sprite, as the default drawing is rather boring! This really makes it look very 'Tron'-like :) EDIT (24 May 2017): Couple of quick links to above ZIP file, can't upload to original location right now: http://s000.tinyupload.com/index.php?file_id=78520137689960463917 https://www.sendspace.com/file/tjynz2 | |||||
; Lorenz Attractor in 3D... from 'Computers and Chaos' by Conrad Bessant,
; converted from AmigaBASIC to Blitz3D by james @ hi - toro . com :)
; CONTROLS:
; Cursors + A & Z, or mouse + both buttons.
; SPACE toggles drawing.
AppTitle "Lorenz Attractor in 3D"
; Display mode...
sw = 640 : sh = 480
;sw = 1024: sh = 768
Graphics3D sw, sh
; I don't pretend to understand any of this, but play with a, b and c for
; different results...
a# = 10
b# = 28
c# = 8.0 / 3.0
dt# = 0.01
x# = 1
y# = 1
z# = 1
; Render every iteration (eg. 2 renders every 2nd iteration, etc)...
detail = 1
cam = CreateCamera ()
CameraRange cam, 0.1, 1000
PositionEntity cam, 0, 0, -50
ball = LoadSprite ("point.bmp", 16 + 32)
If ball
ScaleSprite ball, 2.5, 2.5
spritescale# = 0.5
Else
ball = CreateSprite (): EntityColor ball, 0, 255, 0
spritescale# = 0.25
EndIf
wind = Load3DSound ("wind.wav")
If wind
LoopSound wind
CreateListener (cam, 1, 0.1)
windchannel = EmitSound (wind, ball)
EndIf
SetFont LoadFont ("arial", 15, 1)
fps = CreateTimer (60)
Repeat
WaitTimer (fps)
MoveMouse GraphicsWidth () / 2, GraphicsHeight () / 2
TurnEntity cam, -MouseYSpeed () / 5.0, -MouseXSpeed () / 5.0, 0
If (KeyDown (30)) Or (MouseDown (1))
MoveEntity cam, 0, 0, 0.5
Else
If (KeyDown (44)) Or (MouseDown (2))
MoveEntity cam, 0, 0, -0.5
EndIf
EndIf
If KeyHit (57)
stopdrawing = 1 - stopdrawing
If wind Then ChannelVolume windchannel, 1 - stopdrawing
EndIf
If KeyDown (203)
TurnEntity cam, 0, 2, 0
Else
If KeyDown (205)
TurnEntity cam, 0, -2, 0
EndIf
EndIf
If KeyDown (200)
TurnEntity cam, 2, 0, 0
Else
If KeyDown (208)
TurnEntity cam, -2, 0, 0
EndIf
EndIf
If stopdrawing = False
; These six lines are the equation which produces the whole thing!
dx# = a * (y - x)
dy# = b * x - y - x * z
dz# = x * y - c * z
x = x + dx * dt
y = y + dy * dt
z = z + dz * dt
frames = frames + 1
If frames Mod detail = 0
PositionEntity ball, x, y, z
newball = CopyEntity (ball)
ScaleSprite newball, spritescale, spritescale
EndIf
EndIf
RenderWorld
If stopdrawing
Text 20, 20, "Iterations, drawn every " + detail + " frame(s): " + frames + " -- use SPACE to pause/continue"
EndIf
Flip
Until KeyHit (1)
End |
Comments
| ||
| i'm sorry but what is this supposed to do? |
| ||
| It draws a fractal in 3D. Use cursor keys to rotate, and mouse buttons to zoom in/out. |
| ||
| Couple of copies of archive... http://s000.tinyupload.com/index.php?file_id=78520137689960463917 https://www.sendspace.com/file/tjynz2 |
Code Archives Forum