{"id":990,"date":"2016-12-29T16:02:14","date_gmt":"2016-12-29T16:02:14","guid":{"rendered":"http:\/\/ofalcao.pt\/blog\/?p=990"},"modified":"2016-12-29T16:02:14","modified_gmt":"2016-12-29T16:02:14","slug":"ev3-chaos","status":"publish","type":"post","link":"https:\/\/ofalcao.pt\/blog\/2016\/ev3-chaos","title":{"rendered":"EV3 Chaos"},"content":{"rendered":"<p>Need to practice with Python. Not just for ev3dev\/EV3 but surely this will be my main target.<\/p>\n<p>So today I remembered the 80&#8217;s&#8230; Chaos and fractals and my 8088 taking hours to draw a Mandelbrot on an ambar Hercules screen.<\/p>\n<p>So I found a <a href=\"http:\/\/0pointer.de\/blog\/projects\/mandelbrot.html\">simple python script from Lennart Poettering<\/a> and adapted it to work on EV3:<\/p>\n<pre>#!\/usr\/bin\/python3\r\n\r\n# EV3 03m58s - video: https:\/\/youtu.be\/w5aKqmXz_Wk\r\n# based on a python script from\u00a0 Lennart Poettering\r\n# found here http:\/\/0pointer.de\/blog\/projects\/mandelbrot.html\r\n\r\nfrom PIL import Image, ImageDraw\r\nimport math, colorsys\r\nimport ev3dev.ev3 as ev3\r\nfrom time import sleep\r\n\r\nlcd = ev3.Screen()\r\nlcd.clear()\r\n\r\nsleep(1)\r\n\r\ndimensions = (178, 128)\r\nscale = 1.0\/(dimensions[0]\/3)\r\ncenter = (2.0,1.0)\r\niterate_max = 15\r\ncolors_max = 2\r\n\r\nimg = Image.new(\"1\", dimensions,\"white\")\r\n\r\nd = ImageDraw.Draw(img)\r\n\r\n# Calculate the mandelbrot sequence for the point c with start value z\r\ndef iterate_mandelbrot(c, z = 0):\r\n\u00a0\u00a0\u00a0 for n in range(iterate_max + 1):\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 z = z*z +c\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if abs(z) &gt; 2:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return n\r\n\u00a0\u00a0\u00a0 return None\r\n\r\n# Draw our image\r\nfor y in range(dimensions[1]):\r\n\u00a0\u00a0\u00a0 for x in range(dimensions[0]):\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 c = complex(x * scale - center[0], y * scale - center[1])\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 n = iterate_mandelbrot(c)\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if n is None:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 v = 1\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 else:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 v = n\/100.0\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if v &gt; 0.5 :\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 d.point((x,y), fill = 0)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 else:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 d.point((x,y), fill = 1)\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 lcd.image.paste(img, (0,0))\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 lcd.update()\r\n\r\ndel d\r\nimg.save(\"result.png\")\r\nsleep(1)<\/pre>\n<p>My EV3 is running ev3dev-jessie-2016-12-21 release. No need to install PIL or anything else, just create the script, give execution permissions and run it.<\/p>\n<p>The script takes 3m58s to run. next video shows the result (4x speed):<\/p>\n<div class=\"jetpack-video-wrapper\"><iframe loading=\"lazy\" title=\"EV3 Fractals\" width=\"840\" height=\"473\" src=\"https:\/\/www.youtube.com\/embed\/w5aKqmXz_Wk?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<p>And also the output file:<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/ofalcao.pt\/blog\/wp-content\/uploads\/2016\/12\/result.png\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-991\" src=\"https:\/\/i0.wp.com\/ofalcao.pt\/blog\/wp-content\/uploads\/2016\/12\/result.png?resize=178%2C128\" alt=\"\" width=\"178\" height=\"128\" \/><\/a>Ah, those mighty 80&#8217;s!!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Need to practice with Python. Not just for ev3dev\/EV3 but surely this will be my main target. So today I remembered the 80&#8217;s&#8230; Chaos and fractals and my 8088 taking hours to draw a Mandelbrot on an ambar Hercules screen. So I found a simple python script from Lennart Poettering and adapted it to work &hellip; <a href=\"https:\/\/ofalcao.pt\/blog\/2016\/ev3-chaos\" class=\"more-link\">Continuar a ler<span class=\"screen-reader-text\"> &#8220;EV3 Chaos&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[157,13,158,19,20,148,98],"tags":[283,284,285],"series":[],"class_list":["post-990","post","type-post","status-publish","format-standard","hentry","category-ev3dev-en","category-ev3dev","category-lego-mindstorms-en","category-lego-mindstorms","category-linux","category-linux-en","category-python","tag-chaos","tag-fractals","tag-mandelbrot"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p2Mhyv-fY","_links":{"self":[{"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/posts\/990","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/comments?post=990"}],"version-history":[{"count":0,"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/posts\/990\/revisions"}],"wp:attachment":[{"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/media?parent=990"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/categories?post=990"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/tags?post=990"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/ofalcao.pt\/blog\/wp-json\/wp\/v2\/series?post=990"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}