Pojdi na vsebino

Slika:Harmonic partials on strings.svg

Vsebina strani ni podprta v drugih jezikih.
Iz Wikipedije, proste enciklopedije

Izvorna datoteka (Datoteka SVG, nominalno 620 × 590 pikslov, velikost datoteke: 10 KB)


Povzetek

Opis
English: Illustration of harmonic overtones on the wave set up along a string when it is held steady in certain places, as when a guitar string is plucked while lightly held exactly half way along its length.
Datum
Vir Own work by uploader, based on design of bitmap image Image:Overtone.jpg
Avtor Qef / Houtlijm
Druge različice Massive JPEG bitmap version: Image:Overtone.jpg

Source code

Created by a specially written program in the Lua programming language. To recreate the image just run the program, and it will write the SVG into a file. There are various parameters that can be adjusted at the start of the code. The sine-wave approximation using Bezier curves is derived from Bezier curve sinewave approximation (PDF) by Jim Fitzsimmons.

local MARGIN = 10
local AMPLITUDE, WAVE_WIDTH = 30, 600
local GAP_BETWEEN_WAVES = 25
local NUM_WAVES = 7
local FONT_SIZE, FONT_FUDGE = 20, 5

local WAVE_STYLE = ' stroke="#000" stroke-width="1.5" fill="none"'

local img_wd = 2 * MARGIN   WAVE_WIDTH
local img_ht = 2 * MARGIN   NUM_WAVES * AMPLITUDE * 2  
               (NUM_WAVES - 1) * GAP_BETWEEN_WAVES

local PI = math.asin(1) * 2
local XD = PI / 12
local SQRT2 = math.sqrt(2)
local Y1 = (2 * SQRT2) / 7 - 1 / 7
local Y2 = (4 * SQRT2) / 7 - 2 / 7
local Y3 = SQRT2 / 2
local Y4 = (3 * SQRT2) / 7   2 / 7

function sine_wave_path (x, y, width, amp, num_half_waves)
    local xmul = width / (num_half_waves * PI)
    local xd = XD * xmul
    local path = 'M' .. coords(x, y)
    for _ = 1, num_half_waves do
        path = path .. ' C' .. coords(x   xd,   y   amp * Y1)
                    ..  ' ' .. coords(x   2*xd, y   amp * Y2)
                    ..  ' ' .. coords(x   3*xd, y   amp * Y3)
                    .. ' C' .. coords(x   4*xd, y   amp * Y4)
                    ..  ' ' .. coords(x   5*xd, y   amp)
                    ..  ' ' .. coords(x   6*xd, y   amp)
                    .. ' C' .. coords(x   7*xd, y   amp)
                    ..  ' ' .. coords(x   8*xd, y   amp * Y4)
                    ..  ' ' .. coords(x   9*xd, y   amp * Y3)
                    .. ' C' .. coords(x   10*xd, y   amp * Y2)
                    ..  ' ' .. coords(x   11*xd, y   amp * Y1)
                    ..  ' ' .. coords(x   12*xd, y)
        x = x   width / num_half_waves
        amp = amp * -1  -- flip over vertically every half wave
    end
    return path
end

function coords (x, y)
    return string.format('%g,%g', x, y)
end

local fh = assert(io.open("Harmonic_partials_on_strings.svg", "wb"))
fh:write('<?xml version="1.0" encoding="UTF-8"?>\n' ..
         '<svg version="1.0" width="', img_wd, '" height="', img_ht,
         '" xmlns="http://www.w3.org/2000/svg">\n')

local y_origin = MARGIN   AMPLITUDE
local wave_labels, pick_circles = '', ''
for n = 1, NUM_WAVES do
    local amp = AMPLITUDE - (n - 1) * AMPLITUDE * 0.1
    fh:write(' <path', WAVE_STYLE, ' d="',
             sine_wave_path(MARGIN, y_origin, WAVE_WIDTH, amp, n), ' ',
             sine_wave_path(MARGIN, y_origin, WAVE_WIDTH, -amp, n),
             '"/>\n')
    if n > 1 then
        local pick_x = MARGIN   WAVE_WIDTH / n
        local pick_r = AMPLITUDE * 0.2
        pick_circles = pick_circles .. '  <circle cx="' .. pick_x ..
                       '" cy="' .. y_origin   pick_r ..
                       '" r="' .. pick_r .. '"/>\n'
        wave_labels = wave_labels .. '  <text x="' .. pick_x ..
                      '" y="' .. y_origin - FONT_SIZE   2 * FONT_FUDGE ..
                      '">1/' .. n .. '</text>\n'
    end
    y_origin = y_origin   2 * AMPLITUDE   GAP_BETWEEN_WAVES
end

fh:write(' <g stroke="#000" fill="#bbb">\n', pick_circles, ' </g>\n',
         ' <g font-family="Bitstream Vera Sans" font-size="', FONT_SIZE, 'px"',
         ' text-anchor="middle">\n',
         '  <text x="', MARGIN   FONT_FUDGE,
         '" y="', MARGIN   AMPLITUDE - FONT_SIZE   2 * FONT_FUDGE,
         '">0</text>\n',
         '  <text x="', MARGIN   WAVE_WIDTH - FONT_FUDGE,
         '" y="', MARGIN   AMPLITUDE - FONT_SIZE   2 * FONT_FUDGE,
         '">1</text>\n',
         wave_labels,
         ' </g>\n',
         '</svg>\n')

Licenca

Public domain To delo je dal v javno domeno njegov avtor Qef. To velja po vsem svetu.

V nekaterih državah to pravno morda ni mogoče. Če je tako,
Qef daje (v okviru zakonskih omejitev) vsakomur brezpogojno pravico, da gradivo uporablja v kateri koli namen.

Napisi

Dodajte enovrstični opis, kaj ta datoteka predstavlja

Predmeti, prikazani v tej datoteki

motiv

8. julij 2008

Zgodovina datoteke

Kliknite datum in čas za ogled datoteke, ki je bila takrat naložena.

Datum in časSličicaVelikostUporabnikKomentar
trenutno15:46, 8. julij 2008Sličica za različico z datumom 15:46, 8. julij 2008620 × 590 (10 KB)Qef{{Information |Description={{en|1=Illustration of harmonic overtones on the wave set up along a string when it is held steady in certain places, as when a guitar string is plucked while lightly held exactly half way along its length. }} |Source=Own work

Datoteka je del naslednjih 2 strani slovenske Wikipedije (strani drugih projektov niso navedene):

Globalna uporaba datoteke

To datoteko uporabljajo tudi naslednji vikiji:

Oglejte si globalno uporabo te datoteke.