Archivo:Harmonic partials on strings.svg

De testwiki
Ir a la navegación Ir a la búsqueda
Archivo original (archivo SVG, nominalmente 620 × 590 píxeles, tamaño de archivo: 10 kB)

Este archivo es de Wikimedia Commons y puede usarse en otros proyectos. La descripción en su página de descripción del archivo se muestra debajo.

Resumen

Descripción
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.
Fecha
Fuente Trabajo propio, basado en: Overtone.jpg
Autor Qef / Houtlijm
Otras versiones
SVG desarrollo
InfoField
 El código fuente de esta imagen SVG es válido.
 Este distintivo fue creado con una herramienta SVG desconocida
  This military insignia uses embedded text that can be easily translated using a text editor.

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

Licencia

Public domain Este trabajo ha sido liberado al dominio público por su autor, Qef. Esto aplica para todo el mundo.

En algunos países esto puede no ser legalmente factible; si ello ocurriese:
Qef otorga a cualquier persona el derecho de usar este trabajo para cualquier propósito, sin ningún tipo de condición, a menos que éstas sean requeridas por la ley.

Leyendas

Añade una explicación corta acerca de lo que representa este archivo

Elementos representados en este archivo

representa a

Historial del archivo

Haz clic sobre una fecha y hora para ver el archivo tal como apareció en ese momento.

Fecha y horaMiniaturaDimensionesUsuarioComentario
actual15:46 8 jul 2008Miniatura de la versión del 15:46 8 jul 2008620 × 590 (10 kB)wikimediacommons>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

Las siguientes páginas usan este archivo: