Advertisement
Guest User

Cool Fractal Code

a guest
Aug 7th, 2020
217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.55 KB | None | 0 0
  1. Platform Racing 3 Lua code for fractals. Don't copy the **START OF CODE** things into blocks if you want to use this, and make sure to look at the getblock commands for placing things and put the setup, otherwise the code wont place blocks right. Code goes on top unless otherwise specified.
  2.  
  3. Mandelbrot set (Color, 50 iterations)
  4.  
  5. Fractal generated by iteration count of an equation on a complex plane.
  6. Recommended setup is finish block 3 blocks below, then black 4 blocks below, then 6 other colors below that.
  7. Generation completes, automatically finishes the player.
  8.  
  9. **START OF CODE**
  10. iterations = 50 -- can change, shouldn't matter as long as it isn't below 25
  11. progreal = tolua(player.getmetadata("mandelprogreal", -2))
  12. progimag = tolua(player.getmetadata("mandelprogimag",-1.1))
  13. detail = 0.02 -- detail used, use if determining scale
  14. coolvalue = 0
  15. while coolvalue < 5 do
  16. z_r = 0 -- real z
  17. z_i = 0 -- imaginary z
  18. inset = true
  19. x = progreal
  20. y = progimag
  21. itr = 0 -- iterations passed
  22. while itr <= iterations do
  23. itr = itr + 1
  24. z_rtemp = z_r
  25. z_r = z_r*z_r - z_i*z_i + x
  26. z_i = 2*z_rtemp*z_i + y
  27. if(z_r*z_r + z_i*z_i > 4) then
  28. inset = false
  29. iterremoved = itr
  30. break
  31. end
  32. end
  33. if inset == true then
  34. xplace = x * 50
  35. yplace = y * 50 - 125
  36. block.getblock(0,4).teleportto(math.floor(xplace),math.floor(yplace),false)
  37. else
  38. if iterremoved < 3 then
  39. xplace = x * 50
  40. yplace = y * 50 - 126
  41. block.getblock(0,5).teleportto(math.floor(xplace),math.floor(yplace),false)
  42. elseif iterremoved < 5 then
  43. xplace = x * 50
  44. yplace = y * 50 - 127
  45. block.getblock(0,6).teleportto(math.floor(xplace),math.floor(yplace),false)
  46. elseif iterremoved < 7 then
  47. xplace = x * 50
  48. yplace = y * 50 - 128
  49. block.getblock(0,7).teleportto(math.floor(xplace),math.floor(yplace),false)
  50. elseif iterremoved < 10 then
  51. xplace = x * 50
  52. yplace = y * 50 - 129
  53. block.getblock(0,8).teleportto(math.floor(xplace),math.floor(yplace),false)
  54. elseif iterremoved < 15 then
  55. xplace = x * 50
  56. yplace = y * 50 - 130
  57. block.getblock(0,9).teleportto(math.floor(xplace),math.floor(yplace),false)
  58. elseif iterremoved < 25 then
  59. xplace = x * 50
  60. yplace = y * 50 - 131
  61. block.getblock(0,10).teleportto(math.floor(xplace),math.floor(yplace),false)
  62. else
  63. xplace = x * 50
  64. yplace = y * 50 - 132
  65. block.getblock(0,11).teleportto(math.floor(xplace),math.floor(yplace),false)
  66. end
  67. end
  68. progimag = progimag + detail
  69. if progimag > 1.1 then
  70. progimag = -1.1
  71. progreal = progreal + detail
  72. end
  73. coolvalue = coolvalue + 1
  74. end
  75. if progreal >= 0.5 then
  76. player.chat("set generated.")
  77. player.yvelocity = -0.5
  78. block.getblock(0,3).teleportto(0,-7,false)
  79. end
  80. player.setmetadata("mandelprogreal", progreal)
  81. player.setmetadata("mandelprogimag", progimag)
  82. **END OF CODE**
  83.  
  84. Julia Set (Color, 125 iterations)
  85.  
  86. Fractal generated by iteration count of an equation on a complex plane.
  87. Recommended setup is same as for Mandelbrot set
  88. Generation completes, automatically finishes the player.
  89.  
  90. **START OF CODE**
  91. iterations = 125 -- can change, shouldn't matter as long as it isn't below 50
  92. progreal = tolua(player.getmetadata("mandelprogreal", -1.5))
  93. progimag = tolua(player.getmetadata("mandelprogimag",-1.5))
  94. detail = 0.01 -- detail used, use if determining scale
  95. cx = 0
  96. cy = 0
  97. coolvalue = 0
  98. while coolvalue < 25 do
  99. z_r = progreal -- real z (x)
  100. z_i = progimag -- imaginary z (y)
  101. inset = true
  102. x = progreal
  103. y = progimag
  104. itr = 0 -- iterations passed
  105. while itr <= iterations do
  106. itr = itr + 1
  107. z_rtemp = (z_r * z_r) - (z_i * z_i)
  108. z_i = 2 * z_r * z_i + cy
  109. z_r = z_rtemp + cx
  110. if(z_r*z_r + z_i*z_i > 4) then
  111. inset = false
  112. iterremoved = itr
  113. break
  114. end
  115. end
  116. if inset == true then
  117. xplace = x * 100
  118. yplace = y * 100 - 185
  119. block.getblock(0,4).teleportto(math.floor(xplace),math.floor(yplace),false)
  120. else
  121. if iterremoved < 2 then
  122. xplace = x * 100
  123. yplace = y * 100 - 186
  124. block.getblock(0,5).teleportto(math.floor(xplace),math.floor(yplace),false)
  125. elseif iterremoved < 5 then
  126. xplace = x * 100
  127. yplace = y * 100 - 187
  128. block.getblock(0,6).teleportto(math.floor(xplace),math.floor(yplace),false)
  129. elseif iterremoved < 10 then
  130. xplace = x * 100
  131. yplace = y * 100 - 188
  132. block.getblock(0,7).teleportto(math.floor(xplace),math.floor(yplace),false)
  133. elseif iterremoved < 20 then
  134. xplace = x * 100
  135. yplace = y * 100 - 189
  136. block.getblock(0,8).teleportto(math.floor(xplace),math.floor(yplace),false)
  137. elseif iterremoved < 35 then
  138. xplace = x * 100
  139. yplace = y * 100 - 190
  140. block.getblock(0,9).teleportto(math.floor(xplace),math.floor(yplace),false)
  141. elseif iterremoved < 50 then
  142. xplace = x * 100
  143. yplace = y * 100 - 191
  144. block.getblock(0,10).teleportto(math.floor(xplace),math.floor(yplace),false)
  145. else
  146. xplace = x * 100
  147. yplace = y * 100 - 192
  148. block.getblock(0,11).teleportto(math.floor(xplace),math.floor(yplace),false)
  149. end
  150. end
  151. progimag = progimag + detail
  152. if progimag > 1.5 then
  153. progimag = -1.5
  154. progreal = progreal + detail
  155. end
  156. coolvalue = coolvalue + 1
  157. end
  158. if progreal >= 1.5 then
  159. player.chat("set generated.")
  160. player.yvelocity = -0.5
  161. block.getblock(0,3).teleportto(0,-7,false)
  162. end
  163. player.setmetadata("mandelprogreal", progreal)
  164. player.setmetadata("mandelprogimag", progimag)
  165. **END OF CODE**
  166.  
  167. Barnsley Fern (Mutation support)
  168.  
  169. Fractal generated by repeatedly iterating a series of equations, chosen randomly each time.
  170. Recommended setup is block with color of choice directly below the block (and another copy of this block below that), with an area to change iteration rate and mutation range recommended. Generates normal fern if block is not bumped.
  171. Technically never finishes generating, but after enough iterations it is close enough.
  172.  
  173. Top side code:
  174. **START OF CODE**
  175. local fernx = tolua(player.getmetadata("bfernx",0))
  176. local ferny = tolua(player.getmetadata("bferny",0))
  177. local fernrate = tolua(player.getmetadata("fernrate",5))
  178. mut1 = 0.16 + tolua(player.getmetadata("fernmut1", 0))
  179. mut2 = 0.85 + tolua(player.getmetadata("fernmut2", 0))
  180. mut3 = 1.6 + tolua(player.getmetadata("fernmut3", 0))
  181. mut4 = 0.04 + tolua(player.getmetadata("fernmut4", 0))
  182. mut5 = 0.2 + tolua(player.getmetadata("fernmut5", 0))
  183. mut6 = 0.26 + tolua(player.getmetadata("fernmut6", 0))
  184. mut0 = tolua(player.getmetadata("fernmut0", 1))
  185.  
  186.  
  187.  
  188. local coolman = 0
  189. while coolman < fernrate do
  190. local r = (math.random()) * 100
  191. xnew = fernx
  192. ynew = ferny
  193. if r < 1 then
  194. fernx = 0
  195. ferny = mut1 * ynew
  196. elseif r < 86 then
  197. fernx = mut2 * xnew + mut4 * ynew
  198. ferny = (-1 * mut4) * xnew + mut2 * ynew + mut3
  199. elseif r < 93 then
  200. fernx = mut5 * xnew - mut6 * ynew
  201. ferny = (mut5 + 0.03) * xnew + (mut5 + 0.02) * ynew + mut3
  202. else
  203. fernx = (-0.15 * mut0) * xnew + (0.28 * mut0) * ynew
  204. ferny = mut6 * xnew + (mut5 + 0.04) * ynew + (mut4 + 0.4)
  205. end
  206. graphx = fernx * 100
  207. graphy = (ferny * -100) - 25
  208. block.getblock(0,1).teleportto(math.floor(graphx),math.floor(graphy),false)
  209. coolman = coolman + 1
  210. end
  211. player.setmetadata("bfernx",fernx)
  212. player.setmetadata("bferny",ferny)
  213.  
  214. **END OF CODE**
  215.  
  216. Bump code:
  217. **START OF CODE**
  218. local mutrange = tolua(player.getmetadata("fernmutationrange",1))
  219. mut1 = (math.random() * 0.1 - 0.05) * mutrange
  220. mut2 = (math.random() * 0.1 - 0.05) * mutrange
  221. mut3 = (math.random() * 0.3 - 0.15) * mutrange
  222. mut4 = (math.random() * 0.02 - 0.01) * mutrange
  223. mut5 = (math.random() * 0.1 - 0.05) * mutrange
  224. mut6 = (math.random() * 0.1 - 0.05) * mutrange
  225. mut0 = ((math.random() - 0.5)* mutrange) + 1
  226. player.setmetadata("fernmut1", mut1)
  227. player.setmetadata("fernmut2", mut2)
  228. player.setmetadata("fernmut3", mut3)
  229. player.setmetadata("fernmut4", mut4)
  230. player.setmetadata("fernmut5", mut5)
  231. player.setmetadata("fernmut6", mut6)
  232. player.setmetadata("fernmut0", mut0)
  233. mutoffset = (math.floor(((math.abs(mut1)) + (math.abs(mut2)) + math.abs(mut3) + math.abs(mut4) + math.abs(mut5) + math.abs(mut6) + ((math.abs(mut0-1)))/8) *100))/100
  234. player.chat("fern mutated randomly. total offset is ".. mutoffset ..".",0xff00ff)
  235. **END OF CODE**
  236.  
  237. Sierpinski triangle
  238.  
  239. Fractal generated (here) via chaos game, where a point repeatedly picks a random vertex of a shape and goes half way there.
  240. Recommended setup is block with color of choice directly below, and an area to change iteration rate.
  241. Technically never finishes generating, but after enough iterations it is close enough.
  242.  
  243. **START OF CODE**
  244. local xpos = tolua(player.getmetadata("chaosx",0))
  245. local ypos = tolua(player.getmetadata("chaosy",0))
  246. local iterations = tolua(player.getmetadata("chaositerations",0))
  247. local coolman = tolua(player.getmetadata("coolrate",5))
  248. local coolrunner = 0
  249. if iterations == 0 then
  250. xpos = math.random() - 0.5
  251. ypos = math.random() - 0.5
  252. end
  253. while coolrunner < coolman do
  254. coolrunner = coolrunner + 1
  255. iterations = iterations + 1
  256. local r = math.random(-1,1)
  257. if r == -1 then
  258. xpos = (xpos + 0)/2
  259. ypos = (ypos + 1)/2
  260. elseif r == 0 then
  261. xpos = (xpos - 1)/2
  262. ypos = (ypos - 1)/2
  263. else
  264. xpos = (xpos + 1)/2
  265. ypos = (ypos - 1)/2
  266. end
  267. graphx = math.floor(xpos * 500)
  268. graphy = math.floor(ypos * -500) - 600
  269. if iterations > 250 then
  270. block.getblock(0,1).teleportto(graphx,graphy,false)
  271. end
  272. end
  273. player.setmetadata("chaosx",xpos)
  274. player.setmetadata("chaosy",ypos)
  275. player.setmetadata("chaositerations",iterations)
  276. **END OF CODE**
  277.  
  278. Cool Pentagram Fractal
  279.  
  280. Fractal generated (here) via chaos game, where a point repeatedly picks a random vertex of a shape and goes half way there. In this instance, it is limited to where the same vertex cannot be chosen twice in a row.
  281. Recommended setup is same as for Sierpinski triangle.
  282. Technically never finishes generating, but after enough iterations it is close enough, and in PR3, it may look better with less iterations than more
  283.  
  284. **START OF CODE**
  285. local xpos = tolua(player.getmetadata("chaosx",0))
  286. local ypos = tolua(player.getmetadata("chaosy",0))
  287. local iterations = tolua(player.getmetadata("chaositerations",0))
  288. local coolman = tolua(player.getmetadata("coolrate",5))
  289. local rsaved = tolua(player.getmetadata("rsaved",-3))
  290. local coolrunner = 0
  291. if iterations == 0 then
  292. xpos = math.random() - 0.5
  293. ypos = math.random() - 0.5
  294. end
  295. while coolrunner < coolman do
  296. coolrunner = coolrunner + 1
  297. iterations = iterations + 1
  298. r = math.random(-2,2)
  299. if r == rsaved then
  300. while r == rsaved do
  301. r = math.random(-2,2)
  302. if r ~= rsaved then
  303. break
  304. end
  305. end
  306. end
  307. if r == -2 then
  308. xpos = (xpos + 0)/2
  309. ypos = (ypos + 1)/2
  310. elseif r == -1 then
  311. xpos = (xpos + 0.9510565)/2
  312. ypos = (ypos + 0.309017)/2
  313. elseif r == 0 then
  314. xpos = (xpos + 0.587785)/2
  315. ypos = (ypos - 0.809017)/2
  316. elseif r == 1 then
  317. xpos = (xpos - 0.587785)/2
  318. ypos = (ypos - 0.809017)/2
  319. else
  320. xpos = (xpos - 0.9510565)/2
  321. ypos = (ypos + 0.309017)/2
  322. end
  323. rsaved = r
  324. graphx = math.floor(xpos * 500)
  325. graphy = math.floor(ypos * -500) - 500
  326. if iterations > 1200 then
  327. block.getblock(0,1).teleportto(graphx,graphy,false)
  328. end
  329. end
  330. player.setmetadata("rsaved",rsaved)
  331. player.setmetadata("chaosx",xpos)
  332. player.setmetadata("chaosy",ypos)
  333. player.setmetadata("chaositerations",iterations)
  334. **END OF CODE**
  335.  
  336. If you have any questions about the code, DM me on Discord
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement