{"id":453,"date":"2020-01-25T14:45:59","date_gmt":"2020-01-25T13:45:59","guid":{"rendered":"https:\/\/innovatiestudio.hku.nl\/?p=453"},"modified":"2020-02-18T16:43:17","modified_gmt":"2020-02-18T15:43:17","slug":"the-kleinian-group-experiment","status":"publish","type":"post","link":"https:\/\/innovatiestudio.hku.nl\/?p=453","title":{"rendered":"The Kleinian Group experiment"},"content":{"rendered":"\n<p class=\"has-text-align-center\">This isn&#8217;t the title of an upcoming Dan Brown novel, it&#8217;s an exploration of a fractal type that&#8217;s also referred to as the Apollonian limit set. <\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/01\/nielszunneballefrakkel-1024x683.png\" alt=\"\" class=\"wp-image-455\" srcset=\"https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/01\/nielszunneballefrakkel-1024x683.png 1024w, https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/01\/nielszunneballefrakkel-300x200.png 300w, https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/01\/nielszunneballefrakkel-768x512.png 768w, https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/01\/nielszunneballefrakkel-1536x1024.png 1536w, https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/01\/nielszunneballefrakkel-2048x1365.png 2048w, https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/01\/nielszunneballefrakkel-500x333.png 500w, https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/01\/nielszunneballefrakkel-800x533.png 800w, https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/01\/nielszunneballefrakkel-1280x853.png 1280w, https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/01\/nielszunneballefrakkel-1920x1280.png 1920w, https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/01\/nielszunneballefrakkel-1200x800.png 1200w, https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/01\/nielszunneballefrakkel-1980x1320.png 1980w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>&#8220;A disco for parasites&#8221; is a real-time raymarched Kleinian group fractal.<\/figcaption><\/figure><\/div>\n\n\n\n<p>Fractals have long been the domain of mathematicians and computer graphics programmers, however with the recent advances in procedural content generation and real-time image rendering techniques such as raymarching, their recursive and often mesmerising quality would seemingly lend them well for making art and video game content.  For this experiment I chose the Apollonian gasket, a limit set of the Kleinian group that in my opinion produces quite natural looking patterns. And here we already stumble upon the first barrier one often encounters when looking into how fractals work: the theory is jargon ridden. With this article I aim to provide an accessible entry point to understanding the Apollonian gasket which afforded me to create &#8220;a disco for parasites&#8221;.  <\/p>\n\n\n\n<p>The fractal-like pattern called the Apollonian gasket used to create &#8220;a disco for parasites&#8221; is generated by recursively applying M\u00f6bius transformations to a set of circles located in some particular positions. The initial configuration of circles is bounded by some sort of shape and must satisfy the condition that they&#8217;re externally tangential, in other words their edges touch. Every subsequent iteration fits circles inside the negative space left by the previous iteration. <\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/01\/ApollonianGasketArray_825.gif\" alt=\"\" class=\"wp-image-482\" width=\"859\" height=\"528\"\/><figcaption>Source:  <a href=\"http:\/\/mathworld.wolfram.com\/ApollonianGasket.html\">http:\/\/mathworld.wolfram.com\/ApollonianGasket.html<\/a> <\/figcaption><\/figure><\/div>\n\n\n\n<p>The curvature of a circle is equal to the reciprocal of its radius (1 \/ r) and from this follows that the larger the circle is, the smaller the curvature (a curvature of 0 would look like a straight line). <\/p>\n\n\n\n<div class=\"wp-block-media-text alignwide\" style=\"grid-template-columns:33% auto\"><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"430\" height=\"430\" src=\"https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/01\/apollonianiterations.gif\" alt=\"\" class=\"wp-image-489\"\/><\/figure><div class=\"wp-block-media-text__content\">\n<!-- HTML generated using hilite.me --><div style=\"background: #ffffff; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;\"><pre style=\"margin: 0; line-height: 125%\"><span style=\"color: #008800; font-weight: bold\">float<\/span> ApollonianGasket(<span style=\"color: #008800; font-weight: bold\">vec3<\/span> p)\n{\n    <span style=\"color: #008800; font-weight: bold\">float<\/span> scale <span style=\"color: #333333\">=<\/span> <span style=\"color: #6600EE; font-weight: bold\">1.0<\/span>;\n\n    <span style=\"color: #008800; font-weight: bold\">for<\/span> (<span style=\"color: #008800; font-weight: bold\">int<\/span> i <span style=\"color: #333333\">=<\/span> <span style=\"color: #4400EE; font-weight: bold\">0<\/span>; i <span style=\"color: #333333\">&lt;<\/span> ITERATIONS; i<span style=\"color: #333333\">++<\/span>)\n    {        \n        p <span style=\"color: #333333\">=<\/span> <span style=\"color: #6600EE; font-weight: bold\">2.0<\/span> <span style=\"color: #333333\">*<\/span> clamp(p, <span style=\"color: #333333\">-<\/span><span style=\"color: #008800; font-weight: bold\">vec3<\/span>(<span style=\"color: #6600EE; font-weight: bold\">1.0<\/span>), <span style=\"color: #008800; font-weight: bold\">vec3<\/span>(<span style=\"color: #6600EE; font-weight: bold\">1.0<\/span>)) <span style=\"color: #333333\">-<\/span> p;\n\n        <span style=\"color: #008800; font-weight: bold\">float<\/span> sqrRadius <span style=\"color: #333333\">=<\/span> dot(p, p);\n\n        p <span style=\"color: #333333\">\/=<\/span> sqrRadius;\n        scale <span style=\"color: #333333\">\/=<\/span> sqrRadius;\n    }\n\n    <span style=\"color: #008800; font-weight: bold\">return<\/span> <span style=\"color: #6600EE; font-weight: bold\">0.2<\/span> <span style=\"color: #333333\">*<\/span> abs(p.y) <span style=\"color: #333333\">\/<\/span> scale;\n}\n<\/pre><\/div>\n\n\n\n<p> [<a href=\"https:\/\/www.shadertoy.com\/view\/3lGGD3\">Shadertoy<\/a>] Basic Apollonian gasket that results in the image on the left.  Please note that the fractal is mirrored across the X-axis here.<\/p>\n<\/div><\/div>\n\n\n\n<p>Using a very basic raymarching approach the fractal can be represented in 3D. <\/p>\n\n\n\n<div class=\"wp-block-media-text alignwide\" style=\"grid-template-columns:33% auto\"><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"430\" height=\"430\" src=\"https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/01\/apollonian3d.gif\" alt=\"\" class=\"wp-image-495\"\/><\/figure><div class=\"wp-block-media-text__content\">\n<!-- HTML generated using hilite.me --><div style=\"background: #ffffff; overflow:auto;width:auto;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;\"><pre style=\"margin: 0; line-height: 125%\"><span style=\"color: #008800; font-weight: bold\">void<\/span> mainImage( <span style=\"color: #008800; font-weight: bold\">out<\/span> <span style=\"color: #008800; font-weight: bold\">vec4<\/span> fragColor, <span style=\"color: #008800; font-weight: bold\">in<\/span> <span style=\"color: #008800; font-weight: bold\">vec2<\/span> fragCoord )\n{\n    <span style=\"color: #008800; font-weight: bold\">vec2<\/span> uv <span style=\"color: #333333\">=<\/span> (<span style=\"color: #6600EE; font-weight: bold\">2.0<\/span> <span style=\"color: #333333\">*<\/span> fragCoord <span style=\"color: #333333\">-<\/span> iResolution.xy) <span style=\"color: #333333\">\/<\/span> iResolution.y;\n\n    <span style=\"color: #008800; font-weight: bold\">vec3<\/span> ro <span style=\"color: #333333\">=<\/span> <span style=\"color: #008800; font-weight: bold\">vec3<\/span>(<span style=\"color: #6600EE; font-weight: bold\">0.0<\/span>,  <span style=\"color: #6600EE; font-weight: bold\">3.0<\/span>, <span style=\"color: #333333\">-<\/span><span style=\"color: #6600EE; font-weight: bold\">5.0<\/span>);\n    <span style=\"color: #008800; font-weight: bold\">vec3<\/span> rd <span style=\"color: #333333\">=<\/span> normalize(<span style=\"color: #008800; font-weight: bold\">vec3<\/span>(uv, <span style=\"color: #6600EE; font-weight: bold\">0.0<\/span>) <span style=\"color: #333333\">-<\/span> ro);\n\n    <span style=\"color: #008800; font-weight: bold\">float<\/span> dist <span style=\"color: #333333\">=<\/span> Raymarch(ro, rd);\n\n    <span style=\"color: #008800; font-weight: bold\">vec3<\/span> color <span style=\"color: #333333\">=<\/span> <span style=\"color: #008800; font-weight: bold\">vec3<\/span>(<span style=\"color: #6600EE; font-weight: bold\">0.0<\/span>);\n    <span style=\"color: #008800; font-weight: bold\">if<\/span> (dist <span style=\"color: #333333\">&gt;<\/span> <span style=\"color: #6600EE; font-weight: bold\">0.0<\/span>)\n    {       \n        <span style=\"color: #008800; font-weight: bold\">vec3<\/span> N <span style=\"color: #333333\">=<\/span> calcNormal(ro <span style=\"color: #333333\">+<\/span> dist <span style=\"color: #333333\">*<\/span> rd);\n        <span style=\"color: #008800; font-weight: bold\">vec3<\/span> L <span style=\"color: #333333\">=<\/span> <span style=\"color: #008800; font-weight: bold\">vec3<\/span>(<span style=\"color: #4400EE; font-weight: bold\">0<\/span>,<span style=\"color: #4400EE; font-weight: bold\">0<\/span>,<span style=\"color: #333333\">-<\/span><span style=\"color: #0000DD; font-weight: bold\">1<\/span>);\n\n        color <span style=\"color: #333333\">=<\/span> max(<span style=\"color: #008800; font-weight: bold\">vec3<\/span>(<span style=\"color: #4400EE; font-weight: bold\">0<\/span>), dot(N, L));\n    }\n\n    fragColor <span style=\"color: #333333\">=<\/span> <span style=\"color: #008800; font-weight: bold\">vec4<\/span>(color, <span style=\"color: #0000DD; font-weight: bold\">1<\/span>);\n}\n<\/pre><\/div>\n\n\n\n<p>[<a href=\"https:\/\/www.shadertoy.com\/view\/tty3D3\">Shadertoy<\/a>] Raymarching + surface normal calculation.<\/p>\n<\/div><\/div>\n\n\n\n<p>The final representation distorts the fractal to break the symmetries and make it look more organic. I got interesting results by offsetting the radius, in the case of &#8220;a disco for parasites&#8221;:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>float sqrRadius = dot(p, p + sin(p.x * 0.3) + sin(p.z * 0.25) + sin(p.y * 0.14));<\/p><\/blockquote>\n\n\n\n<p>This resulted in a distorted 3D Apollonian gasket representation, and by experimentally rotating and offsetting the origin and direction vectors a photogenic view was found.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Texturing and lighting<\/h2>\n\n\n\n<p>Texturing proved to be more straightforward than expected. Commonly used strategies for texturing signed distance fields are  triplanar mapping and cubemap lookups, however notwithstanding some stretching and mirroring artifacts it turned out that the components of vector <em>p<\/em> coud just be scaled and used for lookup in tiling 2D diffuse maps for a quite convincing result.<\/p>\n\n\n\n<p>Physically based shading was used for lighting and the red component sampled from the diffuse map using the aforementioned texture coordinates was used for the roughness attribute of the material.  <\/p>\n\n\n\n<p><strong>Literature:<\/strong><\/p>\n\n\n\n<p>Hill, Stephen., et al. (2013). <em>Physically Based Shading in Theory and Practice<\/em>. SIGGRAPH. [Available <a href=\"https:\/\/blog.selfshadow.com\/publications\/s2013-shading-course\/\">here<\/a>] <\/p>\n\n\n\n<p>Y\u00e1\u00f1ez Escanciano, Jorge. (2017).&nbsp;<em>An introduction to the limit set of Kleinian groups<\/em>&nbsp;Master Thesis,&nbsp;Universidad Nacional de Educaci\u00f3n a Distancia (Espa\u00f1a). Facultad de Ciencias  [Available <a href=\"http:\/\/e-spacio.uned.es\/fez\/eserv\/bibliuned:masterMatavanz-Jyanez\/Jorge_Yanez_Escanciano_TFM.pdf\">here<\/a>]<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This isn&#8217;t the title of an upcoming Dan Brown novel, it&#8217;s an exploration of a fractal type that&#8217;s also referred to as the Apollonian limit set. Fractals have long been the domain of mathematicians and computer graphics programmers, however with the recent advances in procedural content generation and real-time image rendering techniques such as raymarching, [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":455,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"tteo2020_transparent_header":false,"footnotes":""},"categories":[24,2,10],"tags":[12,14,11,13],"class_list":["post-453","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-exploration","category-nieuws","category-research-items","tag-apollonian-gasket","tag-circle-packing","tag-fractal","tag-kleinian-group"],"featured_image_urls_v2":{"full":["https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/01\/nielszunneballefrakkel.png",2736,1824,false],"thumbnail":["https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/01\/nielszunneballefrakkel-150x150.png",150,150,true],"medium":["https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/01\/nielszunneballefrakkel-300x200.png",300,200,true],"medium_large":["https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/01\/nielszunneballefrakkel-768x512.png",580,387,true],"large":["https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/01\/nielszunneballefrakkel-1024x683.png",580,387,true],"1536x1536":["https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/01\/nielszunneballefrakkel-1536x1024.png",1536,1024,true],"2048x2048":["https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/01\/nielszunneballefrakkel-2048x1365.png",2048,1365,true],"post-thumbnail":["https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/01\/nielszunneballefrakkel-1200x800.png",1200,800,true],"twentytwenty-fullscreen":["https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/01\/nielszunneballefrakkel-1980x1320.png",1980,1320,true],"awb_sm":["https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/01\/nielszunneballefrakkel-500x333.png",500,333,true],"awb_md":["https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/01\/nielszunneballefrakkel-800x533.png",800,533,true],"awb_lg":["https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/01\/nielszunneballefrakkel-1280x853.png",1280,853,true],"awb_xl":["https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/01\/nielszunneballefrakkel-1920x1280.png",1920,1280,true]},"post_excerpt_stackable_v2":"<p>This isn&#8217;t the title of an upcoming Dan Brown novel, it&#8217;s an exploration of a fractal type that&#8217;s also referred to as the Apollonian limit set. &#8220;A disco for parasites&#8221; is a real-time raymarched Kleinian group fractal. Fractals have long been the domain of mathematicians and computer graphics programmers, however with the recent advances in procedural content generation and real-time image rendering techniques such as raymarching, their recursive and often mesmerising quality would seemingly lend them well for making art and video game content. For this experiment I chose the Apollonian gasket, a limit set of the Kleinian group that&hellip;<\/p>\n","category_list_v2":"<a href=\"https:\/\/innovatiestudio.hku.nl\/?cat=24\" rel=\"category\">Exploration<\/a>, <a href=\"https:\/\/innovatiestudio.hku.nl\/?cat=2\" rel=\"category\">Nieuws<\/a>, <a href=\"https:\/\/innovatiestudio.hku.nl\/?cat=10\" rel=\"category\">R&amp;D<\/a>","author_info_v2":{"name":"Niels Keetels","url":"https:\/\/innovatiestudio.hku.nl\/?author=3"},"comments_num_v2":"0 comments","yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>The Kleinian Group experiment &#187; HKU Innovation Studio<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/innovatiestudio.hku.nl\/?p=453\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The Kleinian Group experiment &#187; HKU Innovation Studio\" \/>\n<meta property=\"og:description\" content=\"This isn&#8217;t the title of an upcoming Dan Brown novel, it&#8217;s an exploration of a fractal type that&#8217;s also referred to as the Apollonian limit set. Fractals have long been the domain of mathematicians and computer graphics programmers, however with the recent advances in procedural content generation and real-time image rendering techniques such as raymarching, [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/innovatiestudio.hku.nl\/?p=453\" \/>\n<meta property=\"og:site_name\" content=\"HKU Innovation Studio\" \/>\n<meta property=\"article:published_time\" content=\"2020-01-25T13:45:59+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-02-18T15:43:17+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/01\/nielszunneballefrakkel-1024x683.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"683\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Niels Keetels\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Niels Keetels\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/innovatiestudio.hku.nl\/?p=453#article\",\"isPartOf\":{\"@id\":\"https:\/\/innovatiestudio.hku.nl\/?p=453\"},\"author\":{\"name\":\"Niels Keetels\",\"@id\":\"https:\/\/innovatiestudio.hku.nl\/#\/schema\/person\/b6c5c25acbd8e2c1f153864baf08d452\"},\"headline\":\"The Kleinian Group experiment\",\"datePublished\":\"2020-01-25T13:45:59+00:00\",\"dateModified\":\"2020-02-18T15:43:17+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/innovatiestudio.hku.nl\/?p=453\"},\"wordCount\":525,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/innovatiestudio.hku.nl\/#organization\"},\"image\":{\"@id\":\"https:\/\/innovatiestudio.hku.nl\/?p=453#primaryimage\"},\"thumbnailUrl\":\"https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/01\/nielszunneballefrakkel.png\",\"keywords\":[\"apollonian gasket\",\"circle packing\",\"fractal\",\"kleinian group\"],\"articleSection\":[\"Exploration\",\"Nieuws\",\"R&amp;D\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/innovatiestudio.hku.nl\/?p=453#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/innovatiestudio.hku.nl\/?p=453\",\"url\":\"https:\/\/innovatiestudio.hku.nl\/?p=453\",\"name\":\"The Kleinian Group experiment &#187; HKU Innovation Studio\",\"isPartOf\":{\"@id\":\"https:\/\/innovatiestudio.hku.nl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/innovatiestudio.hku.nl\/?p=453#primaryimage\"},\"image\":{\"@id\":\"https:\/\/innovatiestudio.hku.nl\/?p=453#primaryimage\"},\"thumbnailUrl\":\"https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/01\/nielszunneballefrakkel.png\",\"datePublished\":\"2020-01-25T13:45:59+00:00\",\"dateModified\":\"2020-02-18T15:43:17+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/innovatiestudio.hku.nl\/?p=453#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/innovatiestudio.hku.nl\/?p=453\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/innovatiestudio.hku.nl\/?p=453#primaryimage\",\"url\":\"https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/01\/nielszunneballefrakkel.png\",\"contentUrl\":\"https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/01\/nielszunneballefrakkel.png\",\"width\":2736,\"height\":1824},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/innovatiestudio.hku.nl\/?p=453#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/innovatiestudio.hku.nl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"The Kleinian Group experiment\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/innovatiestudio.hku.nl\/#website\",\"url\":\"https:\/\/innovatiestudio.hku.nl\/\",\"name\":\"HKU Innovation Studio\",\"description\":\"HKU Innovation Studio project page\",\"publisher\":{\"@id\":\"https:\/\/innovatiestudio.hku.nl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/innovatiestudio.hku.nl\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/innovatiestudio.hku.nl\/#organization\",\"name\":\"HKU Innovation Studio\",\"url\":\"https:\/\/innovatiestudio.hku.nl\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/innovatiestudio.hku.nl\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/04\/cropped-botbrawl-1.jpg\",\"contentUrl\":\"https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/04\/cropped-botbrawl-1.jpg\",\"width\":468,\"height\":333,\"caption\":\"HKU Innovation Studio\"},\"image\":{\"@id\":\"https:\/\/innovatiestudio.hku.nl\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/innovatiestudio.hku.nl\/#\/schema\/person\/b6c5c25acbd8e2c1f153864baf08d452\",\"name\":\"Niels Keetels\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/innovatiestudio.hku.nl\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/5988d9ac2d854760a39f31008af3ccb5e8fc3da7835241ecdffd06b87a88d0c6?s=96&d=retro&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/5988d9ac2d854760a39f31008af3ccb5e8fc3da7835241ecdffd06b87a88d0c6?s=96&d=retro&r=g\",\"caption\":\"Niels Keetels\"},\"url\":\"https:\/\/innovatiestudio.hku.nl\/?author=3\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"The Kleinian Group experiment &#187; HKU Innovation Studio","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/innovatiestudio.hku.nl\/?p=453","og_locale":"en_US","og_type":"article","og_title":"The Kleinian Group experiment &#187; HKU Innovation Studio","og_description":"This isn&#8217;t the title of an upcoming Dan Brown novel, it&#8217;s an exploration of a fractal type that&#8217;s also referred to as the Apollonian limit set. Fractals have long been the domain of mathematicians and computer graphics programmers, however with the recent advances in procedural content generation and real-time image rendering techniques such as raymarching, [&hellip;]","og_url":"https:\/\/innovatiestudio.hku.nl\/?p=453","og_site_name":"HKU Innovation Studio","article_published_time":"2020-01-25T13:45:59+00:00","article_modified_time":"2020-02-18T15:43:17+00:00","og_image":[{"width":1024,"height":683,"url":"https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/01\/nielszunneballefrakkel-1024x683.png","type":"image\/png"}],"author":"Niels Keetels","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Niels Keetels","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/innovatiestudio.hku.nl\/?p=453#article","isPartOf":{"@id":"https:\/\/innovatiestudio.hku.nl\/?p=453"},"author":{"name":"Niels Keetels","@id":"https:\/\/innovatiestudio.hku.nl\/#\/schema\/person\/b6c5c25acbd8e2c1f153864baf08d452"},"headline":"The Kleinian Group experiment","datePublished":"2020-01-25T13:45:59+00:00","dateModified":"2020-02-18T15:43:17+00:00","mainEntityOfPage":{"@id":"https:\/\/innovatiestudio.hku.nl\/?p=453"},"wordCount":525,"commentCount":0,"publisher":{"@id":"https:\/\/innovatiestudio.hku.nl\/#organization"},"image":{"@id":"https:\/\/innovatiestudio.hku.nl\/?p=453#primaryimage"},"thumbnailUrl":"https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/01\/nielszunneballefrakkel.png","keywords":["apollonian gasket","circle packing","fractal","kleinian group"],"articleSection":["Exploration","Nieuws","R&amp;D"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/innovatiestudio.hku.nl\/?p=453#respond"]}]},{"@type":"WebPage","@id":"https:\/\/innovatiestudio.hku.nl\/?p=453","url":"https:\/\/innovatiestudio.hku.nl\/?p=453","name":"The Kleinian Group experiment &#187; HKU Innovation Studio","isPartOf":{"@id":"https:\/\/innovatiestudio.hku.nl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/innovatiestudio.hku.nl\/?p=453#primaryimage"},"image":{"@id":"https:\/\/innovatiestudio.hku.nl\/?p=453#primaryimage"},"thumbnailUrl":"https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/01\/nielszunneballefrakkel.png","datePublished":"2020-01-25T13:45:59+00:00","dateModified":"2020-02-18T15:43:17+00:00","breadcrumb":{"@id":"https:\/\/innovatiestudio.hku.nl\/?p=453#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/innovatiestudio.hku.nl\/?p=453"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/innovatiestudio.hku.nl\/?p=453#primaryimage","url":"https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/01\/nielszunneballefrakkel.png","contentUrl":"https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/01\/nielszunneballefrakkel.png","width":2736,"height":1824},{"@type":"BreadcrumbList","@id":"https:\/\/innovatiestudio.hku.nl\/?p=453#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/innovatiestudio.hku.nl\/"},{"@type":"ListItem","position":2,"name":"The Kleinian Group experiment"}]},{"@type":"WebSite","@id":"https:\/\/innovatiestudio.hku.nl\/#website","url":"https:\/\/innovatiestudio.hku.nl\/","name":"HKU Innovation Studio","description":"HKU Innovation Studio project page","publisher":{"@id":"https:\/\/innovatiestudio.hku.nl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/innovatiestudio.hku.nl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/innovatiestudio.hku.nl\/#organization","name":"HKU Innovation Studio","url":"https:\/\/innovatiestudio.hku.nl\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/innovatiestudio.hku.nl\/#\/schema\/logo\/image\/","url":"https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/04\/cropped-botbrawl-1.jpg","contentUrl":"https:\/\/innovatiestudio.hku.nl\/wp-content\/uploads\/2020\/04\/cropped-botbrawl-1.jpg","width":468,"height":333,"caption":"HKU Innovation Studio"},"image":{"@id":"https:\/\/innovatiestudio.hku.nl\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/innovatiestudio.hku.nl\/#\/schema\/person\/b6c5c25acbd8e2c1f153864baf08d452","name":"Niels Keetels","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/innovatiestudio.hku.nl\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/5988d9ac2d854760a39f31008af3ccb5e8fc3da7835241ecdffd06b87a88d0c6?s=96&d=retro&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5988d9ac2d854760a39f31008af3ccb5e8fc3da7835241ecdffd06b87a88d0c6?s=96&d=retro&r=g","caption":"Niels Keetels"},"url":"https:\/\/innovatiestudio.hku.nl\/?author=3"}]}},"_links":{"self":[{"href":"https:\/\/innovatiestudio.hku.nl\/index.php?rest_route=\/wp\/v2\/posts\/453","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/innovatiestudio.hku.nl\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/innovatiestudio.hku.nl\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/innovatiestudio.hku.nl\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/innovatiestudio.hku.nl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=453"}],"version-history":[{"count":33,"href":"https:\/\/innovatiestudio.hku.nl\/index.php?rest_route=\/wp\/v2\/posts\/453\/revisions"}],"predecessor-version":[{"id":969,"href":"https:\/\/innovatiestudio.hku.nl\/index.php?rest_route=\/wp\/v2\/posts\/453\/revisions\/969"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/innovatiestudio.hku.nl\/index.php?rest_route=\/wp\/v2\/media\/455"}],"wp:attachment":[{"href":"https:\/\/innovatiestudio.hku.nl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=453"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/innovatiestudio.hku.nl\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=453"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/innovatiestudio.hku.nl\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=453"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}