Risto A. Paju<p>With 2D Apollonian gaskets, it's easy to build arbitrary initial configurations. Simply picking 3 random points means you have to solve for 3 radii to make a kissing setup. Since there are exactly 3 distances between the points, this makes a basic linear system. But not so in 3D: you have 4 points and 4 radii, but 6 different distances, so a linear solution won't cut it. You could start with 3 kissing spheres using the 2D logic, but then you can't put the 4th point just anywhere.</p><p>I didn't bother with the messy quadratic system, because there's an easier way: take the symmetric tetrahedral config and deform it using an inversion. Yep, the same tool that's already the bread and butter of gasket-weaving. What's more, we can build the symmetric gasket first and then deform the whole thing. Inversion preserves spheres as spheres and maintains their kissing relations, it doesn't care how many there are.</p><p>In other words, the order doesn't matter with inversions. I've used this trick years ago in some 2D inversion demos to simplify things, and this 3D also benefits hugely from it. Besides the problem of initial config, 3D gaskets also have a speed issue due to deduplication (explained in an earlier post). The inversions are very fast as they can be parallelized, and this also applies to the deformations. So it's nice that we need not rebuild the gasket again for every config, we can just deform the same thing again.</p><p><a href="https://mathstodon.xyz/tags/apollonianspheres" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>apollonianspheres</span></a> <a href="https://mathstodon.xyz/tags/apolloniangasket" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>apolloniangasket</span></a> <a href="https://mathstodon.xyz/tags/gasketweaving" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>gasketweaving</span></a> <a href="https://mathstodon.xyz/tags/iteratedfunctionsystem" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>iteratedfunctionsystem</span></a> <a href="https://mathstodon.xyz/tags/inversion" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>inversion</span></a> <a href="https://mathstodon.xyz/tags/sphereinversion" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>sphereinversion</span></a> <a href="https://mathstodon.xyz/tags/geometricart" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>geometricart</span></a> <a href="https://mathstodon.xyz/tags/3dgraphics" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>3dgraphics</span></a> <a href="https://mathstodon.xyz/tags/digitalsculpture" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>digitalsculpture</span></a> <a href="https://mathstodon.xyz/tags/pythoncode" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>pythoncode</span></a> <a href="https://mathstodon.xyz/tags/opengl" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>opengl</span></a> <a href="https://mathstodon.xyz/tags/algorithmicart" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>algorithmicart</span></a> <a href="https://mathstodon.xyz/tags/algorist" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>algorist</span></a> <a href="https://mathstodon.xyz/tags/mathart" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>mathart</span></a> <a href="https://mathstodon.xyz/tags/laskutaide" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>laskutaide</span></a> <a href="https://mathstodon.xyz/tags/ittaide" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>ittaide</span></a> <a href="https://mathstodon.xyz/tags/kuavataide" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>kuavataide</span></a> <a href="https://mathstodon.xyz/tags/iterati" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>iterati</span></a></p>