File:Hilbert curve 3.svg
From Wikimedia Commons, the free media repository
Jump to navigation
Jump to search
Size of this PNG preview of this SVG file: 512 × 512 pixels. Other resolutions: 240 × 240 pixels | 480 × 480 pixels | 768 × 768 pixels | 1,024 × 1,024 pixels | 2,048 × 2,048 pixels.
Original file (SVG file, nominally 512 × 512 pixels, file size: 619 bytes)
File information
Structured data
Captions
Contents
Summary[edit]
DescriptionHilbert curve 3.svg |
English: First, second, and third order Hilbert Curves overlayed, with the lines getting thinner and darker as the order increases. |
Date | |
Source | Own work (Original text: Own work by uploader, generated by an original program described below) |
Author | Geoff Richards (Qef) |
Other versions |
|
SVG development InfoField | This geometry was created with a text editor. |
Source code InfoField | AcknowledgeThis SVG image, as well as the other two versions draw to lower orders, were generated by running the following [[:en:Lua (programming language)|Lua]] program. It uses the L-system described in the [[:en:Hilbert curve|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.
Lua codelocal 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')
|
Licensing[edit]
Public domainPublic domainfalsefalse |
This work 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: |
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 bytes) | 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 |
You cannot overwrite this file.
File usage on Commons
The following 5 pages use this file:
File usage on other wikis
The following other wikis use this file:
- Usage on ar.wikipedia.org
- Usage on ca.wikipedia.org
- Usage on cs.wikipedia.org
- Usage on el.wikipedia.org
- Usage on en.wikipedia.org
- Usage on es.wikipedia.org
- Usage on it.wikipedia.org
- Usage on pt.wikipedia.org
- Usage on ru.wikipedia.org
- Usage on sr.wikipedia.org
- Usage on tr.wikipedia.org
- Usage on uk.wikipedia.org
- Usage on zh.wikipedia.org