Bước tới nội dung

Tập tin:Harmonic partials on strings.svg

Nội dung trang không được hỗ trợ ở ngôn ngữ khác.
Tập tin này từ Wikimedia Commons
Bách khoa toàn thư mở Wikipedia

Tập tin gốc (tập tin SVG, 620×590 điểm ảnh trên danh nghĩa, kích thước: 10 kB)

Miêu tả

Miêu tả
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.
Ngày
Nguồn gốc Own work by uploader, based on design of bitmap image Image:Overtone.jpg
Tác giả Qef / Houtlijm
Phiên bản khác 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')

Giấy phép

Public domain Tác phẩm này đã được tác giả của nó, Qef, phát hành vào phạm vi công cộng. Điều này có hiệu lực trên toàn thế giới.

Tại một quốc gia mà luật pháp không cho phép điều này, thì:
Qef cho phép tất cả mọi người được quyền sử dụng tác phẩm này với bất cứ mục đích nào, không kèm theo bất kỳ điều kiện nào, trừ phi luật pháp yêu cầu những điều kiện đó.

Chú thích

Ghi một dòng giải thích những gì có trong tập tin này

Khoản mục được tả trong tập tin này

mô tả

Lịch sử tập tin

Nhấn vào ngày/giờ để xem nội dung tập tin tại thời điểm đó.

Ngày/giờHình xem trướcKích cỡThành viênMiêu tả
hiện tại14:46, ngày 8 tháng 7 năm 2008Hình xem trước của phiên bản lúc 14:46, ngày 8 tháng 7 năm 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
Có 2 trang tại Wikipedia tiếng Việt có liên kết đến tập tin (không hiển thị trang ở các dự án khác):

Sử dụng tập tin toàn cục

Những wiki sau đang sử dụng tập tin này:

Xem thêm các trang toàn cục sử dụng tập tin này.