Hilbert curve: Difference between revisions

Content deleted Content added
Added Java implementation
Added JavaScript
Line 348: Line 348:
|__| |__| |__| |__| |__| |__| |__| |__| |__| |__| |__| |__| |__| |__| |__| |__|
|__| |__| |__| |__| |__| |__| |__| |__| |__| |__| |__| |__| |__| |__| |__| |__|
</pre>
</pre>

=={{header|JavaScript}}==
An implementation of GO. Prints an SVG string that can be read in a browser.
<lang javascript>const hilbert = (width, spacing, points) => (x,y,lg,i1, i2, f) => {
if (lg === 1) {
const px = (width - x) * spacing;
const py = (width -y ) * spacing;
points.push(px, py);
return;
}
lg >>= 1;
f(x+i1*lg, y+i1*lg, lg, i1, 1-i2, f);
f(x+i2*lg, y+(1-i2)*lg, lg, i1, i2, f);
f(x+(1-i1)*lg, y+(1-i1)*lg, lg, i1, i2, f);
f(x+(1-i2)*lg, y+i2*lg, lg, 1-i1, i2, f);
return points;
};

/**
* Draw a hilbert curve of the given order.
* Outputs a svg string. Save the string as a .svg file and open in a browser.
* @param {!Number} order
*/
const drawHilbert = order => {
if (!order || order < 1) {
throw 'You need to give a valid positive integer';
} else {
order = Math.floor(order);
}


// Curve Constants
const width = 2**order;
const space = 10;

// SVG Setup
const size = 500;
const stroke = 2;
const col = "red";
const fill = "transparent";

// Prep and run function
const f = hilbert(width, space, []);
const points = f(0, 0, width, 0, 0, f);
const path = points.join(' ');

console.log(
`<svg xmlns="http://www.w3.org/2000/svg"
width="${size}"
height="${size}"
viewBox="${space / 2} ${space / 2} ${width * space} ${width * space}">
<path d="M${path}" stroke-width="${stroke}" stroke="${col}" fill="${fill}"/>
</svg>`);

};

drawHilbert(6);
</lang>


=={{header|Julia}}==
=={{header|Julia}}==