跳至內容

英文维基 | 中文维基 | 日文维基 | 草榴社区

File:Hilbert curve 3.svg

頁面內容不支援其他語言。
這個檔案來自維基共享資源
維基百科,自由的百科全書

原始檔案 (SVG 檔案,表面大小:512 × 512 像素,檔案大小:619位元組)


摘要

描述
English: First, second, and third order Hilbert Curves overlayed, with the lines getting thinner and darker as the order increases.
日期
來源 自己的作品 (Original text: Own work by uploader, generated by an original program described below)
作者 Geoff Richards (Qef)
其他版本
SVG開發
InfoField
 
SVG檔案的原始碼通過W3C驗證
 
原始碼
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')

授權條款

Public domain 此作品已由其作者,Qef,釋出至公有領域。此授權條款在全世界均適用。

這可能在某些國家不合法,如果是的話:
Qef授予任何人有權利使用此作品於任何用途,除受法律約束外,不受任何限制。

說明

添加單行說明來描述出檔案所代表的內容

在此檔案描寫的項目

描繪內容

沒有維基數據項目的某些值

作者姓名字串 繁體中文 (已轉換拼寫):​Qef
維基媒體使用者名稱 繁體中文 (已轉換拼寫):​Qef

著作權狀態 繁體中文 (已轉換拼寫)

檔案來源 Chinese (Taiwan) (已轉換拼寫)

上傳者的原創作品 繁體中文 (已轉換拼寫)

檔案歷史

點選日期/時間以檢視該時間的檔案版本。

日期/時間縮⁠圖尺寸用戶備⁠註
目前2008年7月13日 (日) 15:18於 2008年7月13日 (日) 15:18 版本的縮圖512 × 512(619位元組)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

下列頁面有用到此檔案:

全域檔案使用狀況

以下其他 wiki 使用了這個檔案: