File:Hilbert curve 3.svg
From Wikimedia Commons, the free media repository
Hilbert_curve_3.svg (SVG file, nominally 512 × 512 pixels, file size: 619 B)
[edit] Summary
| Description |
English: First, second, and third order Hilbert Curves overlayed, with the lines getting thinner and darker as the order increases.
|
||
|---|---|---|---|
| Date |
13 July 2008 |
||
| Source |
Own work by uploader, generated by an original program described below |
||
| Author |
Geoff Richards (Qef) |
||
| Permission (Reusing this image) |
See below. | ||
| Other versions |
|
[edit] Source code
This SVG image, as well as the other two versions draw to lower orders, were generated by running the following Lua program. It uses the L-system described in the Wikipedia article on Hilbert curves, using simple string replacement to generate a complete turtle-graphics program, which is then run to generate SVG path instructions.
local IMG_SZ, DEPTH = 512, 3
local fh = assert(io.open("Hilbert_curve.svg", "wb"))
fh:write('<?xml version="1.0" encoding="UTF-8"?>\n',
'<svg version="1.0" width="', IMG_SZ, '" height="', IMG_SZ,
'" xmlns="http://www.w3.org/2000/svg">\n')
local L_SYSTEM_RULES = { -- these are from the Wikipedia article
L = "+RF-LFL-FR+",
R = "-LF+RFR+FL-",
}
local ANGLE_COMMANDS = { -- angle expressed in units of 90 degrees
[0] = "h",
[1] = "v",
[2] = "h-",
[3] = "v-",
}
local STROKE_STYLE = { -- each order drawn with different stroke style
[1] = "stroke:#f00;stroke-width:6;fill:none",
[2] = "stroke:#00f;stroke-width:4;fill:none",
[3] = "stroke:#000;stroke-width:2;fill:none",
[4] = "stroke:#000;stroke-width:1;fill:none",
[5] = "stroke:#000;stroke-width:0.5;fill:none",
}
function turtle_graphics (input, startpos, line_len)
local output = "M" .. startpos .. "," .. startpos
local angle = 0
for i = 1, input:len() do
local cmd = input:sub(i, i)
if cmd == "F" then
output = output .. ANGLE_COMMANDS[angle] .. line_len
elseif cmd == "+" then
angle = (angle + 1) % 4
elseif cmd == "-" then
angle = (angle - 1) % 4
end
end
return output
end
local line_len = IMG_SZ / 2
for d = 1, DEPTH do
local lsys = "L"
for _ = 1, d do
-- Apply the production rules. Note that both 'L' and 'R' rules are
-- applied simultaneously.
lsys = lsys:gsub("([LR])", function (orig)
return L_SYSTEM_RULES[orig]
end)
end
fh:write(' <path style="', STROKE_STYLE[d], '" d="',
turtle_graphics(lsys, line_len / 2, line_len), '"/>\n')
line_len = line_len / 2
end
fh:write('</svg>\n')
[edit] Licensing
| This image has been released into the public domain by its author, Qef. This applies worldwide. In some countries this may not be legally possible; if so: Alemannisch | العربية | Беларуская (тарашкевіца) | Български | Català | Česky | Deutsch | Ελληνικά | English | Español | Eesti | فارسی | Suomi | Français | עברית | Italiano | 日本語 | 한국어 | Lietuvių | Македонски | Malti | Plattdüütsch | Nederlands | Polski | Русский | Српски / Srpski | Svenska | தமிழ் | ไทย | Türkçe | Українська | Vèneto | Tiếng Việt | 中文 | 中文(简体) | 中文(繁體) | +/− |
File history
Click on a date/time to view the file as it appeared at that time.
| Date/Time | Thumbnail | Dimensions | User | Comment | |
|---|---|---|---|---|---|
| current | 15:18, 13 July 2008 | 512×512 (619 B) | Qef (Talk | contribs) | ({{Information |Description={{en|1=First, second, and third order Hilbert Curves overlayed, with the lines getting thinner and darker as the order increases.}} |Source=Own work by uploader, generated by an original program described below |Author=Geoff Ric) |
- Edit this file using an external application (See the setup instructions for more information)
File links
The following 4 pages link to this file:
Global file usage
The following other wikis use this file:
- Usage of Hilbert curve 3.svg on enwiki