Fractals: Difference between revisions
>Mindraker No edit summary |
>Mindraker No edit summary |
(No difference)
|
Revision as of 08:19, 29 December 2008
Sierpinsky Triangle
x = 0 y = 1.8 z = 0 for i = 1, 4000 do a = math.random(1,3) if a == 1 then x = x / 2 z = (z - 250)/2 end if a == 2 then x = (x - 250)/2 z = (z + 250)/2 end if a == 3 then x = (x + 250)/2 z = (z + 250)/2 end p = Instance.new("Part") p.CFrame = CFrame.new(Vector3.new(x,1.8,z)) p.Size = Vector3.new(1,1,1) p.Anchored = true p.Color = Color3.new(1) p.Parent = game.Workspace --wait(.1) end
3D Sierpinsky Triangle
WARNING This can freeze up your computer. (My computer could only handle 5000 after about a half hour.) If you have a slow computer, reduce the "For" loop to a lower number, like 500, then work your way up to 1000.
For a better picture of what this is, see the wikipedia article on Sierpinsky triangles
local x = 0 local y = 1.8 local z = 0 for i = 1, 5000 do a = math.random(1,8) if a == 1 then x = (x - 200)/2 y = (y - 200)/2 z = (z + 200)/2 end if a == 2 then x = (x + 200)/2 y = (y - 200)/2 z = (z + 200)/2 end if a == 3 then x = (x - 200)/2 y = (y - 200)/2 z = (z - 200)/2 end if a == 4 then x = (x + 200)/2 y = (y - 200)/2 z = (z - 200)/2 end if a == 5 then x = (x + 0)/2 y = (y + 200)/2 z = (z + 0)/2 end p = Instance.new("Part") p.CFrame = CFrame.new(Vector3.new(x,y,z)) p.Size = Vector3.new(1,1,1) p.Anchored = true p.Color = Color3.new(1) p.Parent = game.Workspace --wait(.1) end
Sierpinksy
This won't make a mathematical recreation of the Sierpinksy fractal, but it will merely make a pretty visual representation of it.
x=1 y=1 for i = 50, 1, -1 do x=i y=(50-i) z=(50-i) p = Instance.new("Part") p.CFrame = CFrame.new(Vector3.new(1,i,1)) p.Size = Vector3.new(y,1,z) p.Anchored = true p.Color = Color3.new(1) p.Parent = game.Workspace --wait(1) end for i = 50, 1, -1 do x=i y=(50-i) z=(50-i) p = Instance.new("Part") p.CFrame = CFrame.new(Vector3.new(1+50,i,1+50)) p.Size = Vector3.new(y,1,z) p.Anchored = true p.Color = Color3.new(1) p.Parent = game.Workspace --wait(1) end for i = 50, 1, -1 do x=i y=(50-i) z=(50-i) p = Instance.new("Part") p.CFrame = CFrame.new(Vector3.new(1+50,i,1)) p.Size = Vector3.new(y,1,z) p.Anchored = true p.Color = Color3.new(1) p.Parent = game.Workspace --wait(1) end for i = 50, 1, -1 do x=i y=(50-i) z=(50-i) p = Instance.new("Part") p.CFrame = CFrame.new(Vector3.new(1,i,1+50)) p.Size = Vector3.new(y,1,z) p.Anchored = true p.Color = Color3.new(1) p.Parent = game.Workspace --wait(1) end for i = 50, 1, -1 do x=i y=(50-i) z=(50-i) p = Instance.new("Part") p.CFrame = CFrame.new(Vector3.new(1+25,i+50,1+25)) p.Size = Vector3.new(y,1,z) p.Anchored = true p.Color = Color3.new(1) p.Parent = game.Workspace --wait(1) end
Fern leaf
x = 1 y = 1.8 z = 1 for i = 1, 500 do a = math.random(1,100) if a == 1 then x = 0 z = (0.16*z) elseif a > 1 and a <= 8 then x = ((0.20*x) - (0.26*z)) z= (0.23*x + 0.22*z + 16) elseif a > 8 and a <= 15 then x = ((-0.15*x) + 0.28*z) z = (0.26*x + 0.24*z + 4.4) elseif a > 15 and a <= 100 then x = 0.85*x + 0.04*z z = ((-0.04*x) + 0.85*z + 16) end p = Instance.new("Part") p.CFrame = CFrame.new(Vector3.new(x,1.8,z)) p.Size = Vector3.new(1,1,1) p.Anchored = true p.Color = Color3.new(1) p.Parent = game.Workspace wait(.1) end
Mandelbrot set
This image requires the Output window of Roblox studio. Thanks to Serveringhaus.org for this code.
iter=100 esclim=2.0 ulx=-2.0 uly=1.0 lrx=1.0 lry=-1.0 width=70 height=40 function abs(x,y) return math.sqrt(x*x+y*y) end function escapeq(cx,cy) local zx=0.0 local zy=0.0 local i=0 while i<iter and abs(zx,zy)<esclim do tmp=zx*zx-zy*zy zy=2.0*zx*zy zx=tmp zx=zx+cx zy=zy+cy i=i+1 end return i<iter end for y=1,height do line='' for x=1,width do zx=ulx+(lrx-ulx)/width*x; zy=uly+(lry-uly)/height*y; if escapeq(zx,zy) then line=line..'.' else line=line..'#' end end print(line); end
Mandelbrot Brick Set
This is almost identical to the script above, but it uses bricks instead of the Output menu.
iter=100 esclim=2.0 ulx=-2.0 uly=1.0 lrx=1.0 lry=-1.0 width=70 height=40 function abs(x,y) return math.sqrt(x*x+y*y) end function escapeq(cx,cy) local zx=0.0 local zy=0.0 local i=0 while i<iter and abs(zx,zy)<esclim do tmp=zx*zx-zy*zy zy=2.0*zx*zy zx=tmp zx=zx+cx zy=zy+cy i=i+1 end return i<iter end for y=1,height do for x=1,width do zx=ulx+(lrx-ulx)/width*x; zy=uly+(lry-uly)/height*y; if escapeq(zx,zy) then p = Instance.new("Part") p.CFrame = CFrame.new(Vector3.new(x,1.8,y)) p.Size = Vector3.new(1,1,1) p.Anchored = true p.Color = Color3.new(1) p.Parent = game.Workspace --wait(.1) else p = Instance.new("Part") p.CFrame = CFrame.new(Vector3.new(x,1.8,y)) p.Size = Vector3.new(1,1,1) p.Anchored = true --p.Color = Color3.new(2) p.Parent = game.Workspace --wait(.1) end end end
Cantor set
x = 0 y = 1.8 z = 0 for i = 1, 3000 do a = math.random(1,4) if a == 1 then x = (x - 250)/3 z = (z - 250)/3 end if a == 2 then x = (x - 250)/3 z = (z + 250)/3 end if a == 3 then x = (x + 250)/3 z = (z + 250)/3 end if a == 4 then x = (x + 250)/3 z = (z - 250)/3 end p = Instance.new("Part") p.CFrame = CFrame.new(Vector3.new(x,1.8,z)) p.Size = Vector3.new(1,1,1) p.Anchored = true p.Color = Color3.new(1) p.Parent = game.Workspace --wait(.1) end
3D Cantor set
WARNING This can freeze up your computer. If you have a slow computer, reduce the "For" loop to a lower number, like 500, then work your way up to 1000.
local x = 0 local y = 1.8 local z = 0 for i = 1, 2000 do a = math.random(1,8) if a == 1 then x = (x - 250)/3 y = (y - 250)/3 z = (z - 250)/3 end if a == 2 then x = (x - 250)/3 y = (y - 250)/3 z = (z + 250)/3 end if a == 3 then x = (x - 250)/3 y = (y + 250)/3 z = (z - 250)/3 end if a == 4 then x = (x - 250)/3 y = (y + 250)/3 z = (z + 250)/3 end if a == 5 then x = (x + 250)/3 y = (y + 250)/3 z = (z + 250)/3 end if a == 6 then x = (x + 250)/3 y = (y - 250)/3 z = (z + 250)/3 end if a == 7 then x = (x + 250)/3 y = (y + 250)/3 z = (z - 250)/3 end if a == 8 then x = (x + 250)/3 y = (y - 250)/3 z = (z - 250)/3 end p = Instance.new("Part") p.CFrame = CFrame.new(Vector3.new(x,y,z)) p.Size = Vector3.new(1,1,1) p.Anchored = true p.Color = Color3.new(1) p.Parent = game.Workspace --wait(.1) end
3D Cantor set 2
This is a proportional representation of the 3D Cantor set.
p = Instance.new("Part") p.CFrame = CFrame.new(Vector3.new(1,17,1)) p.Size = Vector3.new(33,33,33) p.Anchored = true p.Color = Color3.new(1) p.Parent = game.Workspace p = Instance.new("Part") p.CFrame = CFrame.new(Vector3.new(1+66,17,1+66)) p.Size = Vector3.new(33,33,33) p.Anchored = true p.Color = Color3.new(1) p.Parent = game.Workspace p = Instance.new("Part") p.CFrame = CFrame.new(Vector3.new(1+66,17,1)) p.Size = Vector3.new(33,33,33) p.Anchored = true p.Color = Color3.new(1) p.Parent = game.Workspace p = Instance.new("Part") p.CFrame = CFrame.new(Vector3.new(1,17,1+66)) p.Size = Vector3.new(33,33,33) p.Anchored = true p.Color = Color3.new(1) p.Parent = game.Workspace p = Instance.new("Part") p.CFrame = CFrame.new(Vector3.new(1+66,17+66,1+66)) p.Size = Vector3.new(33,33,33) p.Anchored = true p.Color = Color3.new(1) p.Parent = game.Workspace p = Instance.new("Part") p.CFrame = CFrame.new(Vector3.new(1,17+66,1+66)) p.Size = Vector3.new(33,33,33) p.Anchored = true p.Color = Color3.new(1) p.Parent = game.Workspace p = Instance.new("Part") p.CFrame = CFrame.new(Vector3.new(1+66,17+66,1)) p.Size = Vector3.new(33,33,33) p.Anchored = true p.Color = Color3.new(1) p.Parent = game.Workspace p = Instance.new("Part") p.CFrame = CFrame.new(Vector3.new(1,17+66,1)) p.Size = Vector3.new(33,33,33) p.Anchored = true p.Color = Color3.new(1) p.Parent = game.Workspace
Untitled
x = 68 y = 1.8 z = 56 for i = 1, 500 do a = math.random(1,5) if a == 1 then x = x / 3 z = (z - 57)/3 end if a == 2 then x = (x + 68)/3 z = (z - 13)/3 end if a == 3 then x = (x + 42)/3 z = (z + 58)/3 end if a == 4 then x = (x - 42)/3 z = (z + 58)/3 end if a == 5 then x = (x - 68)/3 z = (z - 13)/3 end p = Instance.new("Part") p.CFrame = CFrame.new(Vector3.new(x,1.8,z)) p.Size = Vector3.new(1,1,1) p.Anchored = true p.Color = Color3.new(1) p.Parent = game.Workspace --wait(.1) end
Untitled2
x = 82 y = 1.8 z = 30 for i = 1, 500 do a = math.random(1,6) if a == 1 then x = (x - 185)/5 z = (z - 300)/5 end if a == 2 then x = (x + 180)/5 z = (z - 300)/5 end if a == 3 then x = (x + 345)/5 z = (z + 5)/5 end if a == 4 then x = (x + 175)/5 z = (z + 300)/5 end if a == 5 then x = (x - 180)/5 z = (z + 300)/5 end if a == 6 then x = (x - 350)/5 z = (z + 5)/5 end p = Instance.new("Part") p.CFrame = CFrame.new(Vector3.new(x,1.8,z)) p.Size = Vector3.new(1,1,1) p.Anchored = true p.Color = Color3.new(1) p.Parent = game.Workspace --wait(.1) end
Quadratic Koch, 2nd iteration
This doesn't get into the math behind it. See wikipedia for more info.
p = Instance.new("Part") p.CFrame = CFrame.new(Vector3.new(1,16.2,0)) p.Size = Vector3.new(30,30,30) p.Anchored = true p.Color = Color3.new(0) p.formFactor = "Symmetric" p.Parent = game.Workspace p = Instance.new("Part") p.CFrame = CFrame.new(Vector3.new(0,21,0)) p.Size = Vector3.new(10,10,10) p.Anchored = true p.Color = Color3.new(1) p.Parent = game.Workspace p.formFactor = "Symmetric" p = Instance.new("Part") p.CFrame = CFrame.new(Vector3.new(0,16.2,20)) p.Size = Vector3.new(10,10,10) p.Anchored = true p.Color = Color3.new(1) p.Parent = game.Workspace p.formFactor = "Symmetric" p = Instance.new("Part") p.CFrame = CFrame.new(Vector3.new(21,16.2,0)) p.Size = Vector3.new(10,10,10) p.Anchored = true p.Color = Color3.new(1) p.Parent = game.Workspace p.formFactor = "Symmetric" p = Instance.new("Part") p.CFrame = CFrame.new(Vector3.new(-19,16.2,0)) p.Size = Vector3.new(10,10,10) p.Anchored = true p.Color = Color3.new(1) p.Parent = game.Workspace p.formFactor = "Symmetric" p = Instance.new("Part") p.CFrame = CFrame.new(Vector3.new(0,16.2,-20)) p.Size = Vector3.new(10,10,10) p.Anchored = true p.Color = Color3.new(1) p.Parent = game.Workspace p.formFactor = "Symmetric" p = Instance.new("Part") p.CFrame = CFrame.new(Vector3.new(0,6.2,30)) p.Size = Vector3.new(10,10,10) p.Anchored = true p.Color = Color3.new(1) p.Parent = game.Workspace p.formFactor = "Symmetric" p = Instance.new("Part") p.CFrame = CFrame.new(Vector3.new(-29, 6.2, 0)) p.Size = Vector3.new(10,10,10) p.Anchored = true p.Color = Color3.new(1) p.Parent = game.Workspace p.formFactor = "Symmetric" p = Instance.new("Part") p.CFrame = CFrame.new(Vector3.new(0, 6.2, -30)) p.Size = Vector3.new(10,10,10) p.Anchored = true p.Color = Color3.new(1) p.Parent = game.Workspace p.formFactor = "Symmetric" p = Instance.new("Part") p.CFrame = CFrame.new(Vector3.new(31, 6.2, 0)) p.Size = Vector3.new(10,10,10) p.Anchored = true p.Color = Color3.new(1) p.Parent = game.Workspace p.formFactor = "Symmetric" p = Instance.new("Part") p.CFrame = CFrame.new(Vector3.new(31, 6.2, -30)) p.Size = Vector3.new(10,10,10) p.Anchored = true p.Color = Color3.new(1) p.Parent = game.Workspace p.formFactor = "Symmetric" p = Instance.new("Part") p.CFrame = CFrame.new(Vector3.new(-30, 6.2, -30)) p.Size = Vector3.new(10,10,10) p.Anchored = true p.Color = Color3.new(1) p.Parent = game.Workspace p.formFactor = "Symmetric" p = Instance.new("Part") p.CFrame = CFrame.new(Vector3.new(-29, 6.2, 30)) p.Size = Vector3.new(10,10,10) p.Anchored = true p.Color = Color3.new(1) p.Parent = game.Workspace p.formFactor = "Symmetric" p = Instance.new("Part") p.CFrame = CFrame.new(Vector3.new(30, 6.2, 30)) p.Size = Vector3.new(10,10,10) p.Anchored = true p.Color = Color3.new(1) p.Parent = game.Workspace p.formFactor = "Symmetric"
Vicsek Fractal
x = 50 y = 1.8 z = 50 for i = 1, 1000, 1 do a = math.random(1,5) if a == 1 then x = .33*x - 66 z = .33*z + 66 end if a == 2 then x = .325*x +.325*z z = -.325*x+.325*z end if a == 3 then x = .33*x - 66 z = .33*z - 66 end if a == 4 then x = .33*x + 66 z = .33*z - 66 end if a == 5 then x = .33*x + 66 z = .33*z + 66 end p = Instance.new("Part") p.CFrame = CFrame.new(Vector3.new(x,1.8,z)) p.Size = Vector3.new(1,1,1) p.Anchored = true p.Color = Color3.new(1) p.Parent = game.Workspace --wait(.1) end
Other Roblox Fractal images
See Also
Beauty in Mathematics, an introductory article on fractals with helpful images