1<!DOCTYPE html> 2<html lang="en"> 3 4<head> 5 <meta charset="utf-8"> 6 <title>corte.si</title> 7 <base href="https://corte.si/posts/spacecurve/announce/"> 8 <link rel="stylesheet" href="/site.css"> 9 <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600&display=swap"> 10 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@mdi/font@7/css/materialdesignicons.min.css"> 11 <link rel="alternate" type="application/atom+xml" href="https://corte.si/atom.xml" /> 12 13 <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"> 14 <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"> 15 <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"> 16 <link rel="manifest" href="/site.webmanifest"> 17 <link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5"> 18 <meta name="msapplication-TileColor" content="#da532c"> 19 <meta name="theme-color" content="#ffffff"> 20</head> 21 22<body> 23 24<div class="container post"> 25 <div class="header"> 26 <a class="name" href="/">cortesi</a> 27 <div class="contact"> 28 <a class="mail" href="mailto:[email protected]">[email protected]</a> 29 <a class="twitter" href="https://twitter.com/cortesi"> 30 <i class="mdi mdi-twitter"></i> 31 </a> 32 <a class="github" href="https://github.com/cortesi"> 33 <i class="mdi mdi-github"></i> 34 </a> 35 </div> 36</div> 37 38 <h1 class="title"> 39 Spacecurve 40 </h1> 41 <p class="subtitle"><strong>2026-01-28</strong></p> 42 <div class="content"> 43 <p>In 2024, I noticed that I'd let my blog languish. Since the issue was urgent, I 44made a firm new year's resolution to address the situation in 2025. Which is 45why, today, in January 2026, I'm writing this post.</p> 46<p>I've just released <a rel="external" href="https://github.com/cortesi/spacecurve">spacecurve</a>, a new 47just-for-fun space-filling curve project. It's is the latest symptom of a long 48preoccupation with these beautiuful mathematical objects. Over the years, 49this preoccupation yielded blog posts like <a href="/posts/visualisation/malware/">malware 50visualisations</a>, a <a href="/posts/code/hilbert/portrait/">portrait of the Hilbert 51curve</a> and tools like 52<a rel="external" href="https://binvis.io">binvis.io</a>. I have a long list of related ideas I never got 53to but have to wanted to explore, and the first step is naturally to... rewrite 54it in Rust. This is just a starting point, a base for exploring ideas I have 55about visualisation, color spaces, and the qualities of the curves themselves.</p> 56<p>As part of the rewrite we now have fast base implementations of the curves 57themselves in the <a rel="external" href="https://crates.io/spacecurve">spacecurve</a> library, and a 58visual exploration tool for 2D and 3D curves in the 59<a rel="external" href="https://crates.io/crates/scurve">scurve</a> command-line tool. Thanks to 60<a rel="external" href="https://egui.rs">egui</a>, the visualiser runs both natively and in the browser.</p> 61<p>Click through on the images below to see the web version.</p> 62<div class="media-grid media-stack"> 63<div class="media media-frame"> 64 <a href="/spacecurve/index.html"> 65 <img src="./2d.png" alt="2D rendering of Spacecurve" /> 66 </a> 67 68 69</div> 70</div> 71<div class="media-grid media-stack"> 72<div class="media media-frame"> 73 <a href="/spacecurve/index.html"> 74 <img src="./3d.png" alt="3D rendering of Spacecurve" /> 75 </a> 76 77 78</div> 79</div> 80<h2 id="installation">Installation</h2> 81<p><strong>spacecurve</strong> is a Rust library for generating a variety of space-filling 82curves, including Hilbert, Peano, Sierpinski, Moore, and Z-order curves.</p> 83<pre class="giallo" style="color: #24292E; background-color: #FFFFFF;"><code data-lang="shellscript"><span class="giallo-l"><span style="color: #6F42C1;">cargo</span><span style="color: #032F62;"> add spacecurve</span></span></code></pre> 84<p><strong>scurve</strong> is a command-line tool for generating and visualizing space-filling 85curves.</p> 86<pre class="giallo" style="color: #24292E; background-color: #FFFFFF;"><code data-lang="shellscript"><span class="giallo-l"><span style="color: #6F42C1;">cargo</span><span style="color: #032F62;"> install scurve</span></span></code></pre> 87<p>It includes an egui interface for exploring the curves in 2D and 3D, which you 88can run like this:</p> 89<pre class="giallo" style="color: #24292E; background-color: #FFFFFF;"><code data-lang="shellscript"><span class="giallo-l"><span style="color: #6F42C1;">scurve</span><span style="color: #032F62;"> gui</span></span></code></pre><h2 id="spacecurve-web">spacecurve web</h2> 90<p>Because egui supports webassembly, I've also deployed the egui app to the web. 91Access it by clicking below, or on any of the images above.</p> 92<p><a href="/spacecurve/index.html">Web Viewer</a></p> 93 94 </div> 95</div> 96 97 <footer class="site-footer"> 98 <div class="container"> 99 © Aldo Cortesi 100 </div> 101 </footer> 102</body> 103 104</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.