Zur Beschreibungsseite auf Commons

Datei:Hilbert curve 3.svg

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

Originaldatei(SVG-Datei, Basisgröße: 512 × 512 Pixel, Dateigröße: 619 Bytes)

Diese Datei und die Informationen unter dem roten Trennstrich werden aus dem zentralen Medienarchiv Wikimedia Commons eingebunden.

Zur Beschreibungsseite auf Commons


Beschreibung

Beschreibung
English: First, second, and third order Hilbert Curves overlayed, with the lines getting thinner and darker as the order increases.
Datum
Quelle Eigenes Werk (Originaltext: Own work by uploader, generated by an original program described below)
Urheber Geoff Richards (Qef)
Andere Versionen
SVG‑Erstellung
InfoField
 
Der SVG-Code ist valide.
 
Diese Geometrie wurde mit einem Texteditor erstellt. Die Validierung hat sie für syntaktisch korrekt befunden.
Quelltext
InfoField

Acknowledge

This 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 code

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')

Lizenz

Public domain Dieses Werk wurde von seinem Urheber Qef als gemeinfrei veröffentlicht. Dies gilt weltweit.

In manchen Staaten könnte dies rechtlich nicht möglich sein. Sofern dies der Fall ist:
Qef gewährt jedem das bedingungslose Recht, dieses Werk für jedweden Zweck zu nutzen, es sei denn, Bedingungen sind gesetzlich erforderlich.

Kurzbeschreibungen

Ergänze eine einzeilige Erklärung, was diese Datei darstellt.

In dieser Datei abgebildete Objekte

Motiv

Dateiversionen

Klicke auf einen Zeitpunkt, um diese Version zu laden.

Version vomVorschaubildMaßeBenutzerKommentar
aktuell17:18, 13. Jul. 2008Vorschaubild der Version vom 17:18, 13. Jul. 2008512 × 512 (619 Bytes)Qef{{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

Keine Seiten verwenden diese Datei.

Globale Dateiverwendung

Die nachfolgenden anderen Wikis verwenden diese Datei: