Slika:SquareWaveFourierArrows.gif

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

SquareWaveFourierArrows.gif(300 × 90 točk, velikost datoteke: 214 KB, MIME-vrsta: image/gif, ponavljajoče, 200 sličic, 4,0 s)


Povzetek

Opis
English: The six arrows represent the first six terms of the Fourier series of a square wave. The two circles at the bottom represent the exact square wave (blue) and its Fourier-series approximation (purple).
Datum
Vir lastno delo
Avtor Sbyrnes321
Druge različice File:SquareWaveFourierArrows,rotated.gif

Licenca

Jaz, imetnik avtorskih pravic na tem delu, ga objavljam pod naslednjo licenco:
Creative Commons CC-Zero Datoteka je na voljo pod licenco Creative Commons Univerzalna izročitev v javno domeno CC0 1.0
Oseba, ki je delo povezala s tem dovoljenjem, je dala svoje delo v javno domeno z opustitvijo vseh svojih pravic do dela po vsem svetu pod avtorskim pravom, vključno z vsemi povezanimi in sorodnimi pravicami, v obsegu, kot ga dopušča zakonodaja. Delo lahko kopirate, spreminjate, razširjate in izvajate, tudi v gospodarske namene, ne da bi morali zaprositi za dovoljenje.

Source code

"""
(C) Steven Byrnes, 2014. This code is released under the MIT license
http://opensource.org/licenses/MIT

This code should work in Python 2.7 or 3.3. It requires imagemagick to be
installed; that's how it assembles images into animated GIFs.
"""

from __future__ import division, print_function

import pygame as pg
from math import pi
from cmath import exp

import subprocess, os
directory_now = os.path.dirname(os.path.realpath(__file__))

frames_in_anim = 200
animation_loop_seconds = 5 #time in seconds for animation to loop one cycle

bgcolor = (255,255,255) #white

circle_radius = 12

img_height = 300
img_width = 1000

# pygame draws pixel-art, not smoothed. Therefore I am drawing it
# bigger, then smoothly shrinking it down
final_width = int(round(0.3 * img_width))
final_height = int(round(0.3 * img_height))

# Constants and function for calculating electron motion
def coef(n):
    """ f(t) = sum of Re[coef(n) * e^(int)] """
    return 0 if n % 2 == 0 else -1j / n

def exact(phase):
    """ exact square wave function """
    if phase == 0 or phase == pi:
        return 0
    if (phase % (2*pi)) < pi:
        return pi/4
    return -pi/4

center_x = 500
scale = 450 # scale multiplies all horizontal distances

def draw_arrow(surf, tail_xy, head_xy, width=2, color=(0,0,0)):
    """
    draw a horizontal arrow
    """
    # tail_xy and head_xy are 2-tuples. Unpack them first
    tail_x, tail_y = tail_xy
    head_x, head_y = head_xy
    assert head_y == tail_y
    h = 16 # arrowhead height
    b = 18 # arrowhead half-base
    if tail_x < head_x:
        # rightward arrow
        triangle = [(head_x, head_y),
                    (head_x - h, head_y - b),
                    (head_x - h, head_y + b)]
    else:
        # leftward arrow
        triangle = [(head_x, head_y),
                    (head_x + h, head_y - b),
                    (head_x + h, head_y + b)]
    pg.draw.line(surf, color, (tail_x, tail_y), (head_x, head_y), width)
    pg.draw.polygon(surf, color, triangle, 0)

def main():
    """ function for creating the animated GIF """
    # Make and save a drawing for each frame
    filename_list = [os.path.join(directory_now, 'temp' + str(n) + '.png')
                         for n in range(frames_in_anim)]

    
    for frame in range(frames_in_anim):
        phase = 2 * pi * frame / frames_in_anim
        
        # initialize surface
        surf = pg.Surface((img_width,img_height))
        surf.fill(bgcolor)
        
        # draw all the arrows
        x_now = center_x
        y_now = 30
        for n in range(1,13,2):
            new_term = (scale * coef(n) * exp(n * 1j * phase)).real
            draw_arrow(surf, (x_now, y_now), (x_now + new_term, y_now), width=8)
            x_now += new_term
            y_now += 30
        
        # draw the two circles
        pg.draw.circle(surf, (100,0,100),
                       (int(round(x_now)),int(round(y_now + 10))),
                       circle_radius, 0)
        pg.draw.circle(surf, (50,50,150),
                       (int(round(center_x + scale * exact(phase))),
                            int(round(y_now + 40))),
                       circle_radius, 0)

        # scale down then save the surface
        shrunk_surface = pg.transform.smoothscale(surf, (final_width, final_height))
        pg.image.save(shrunk_surface, filename_list[frame])

    seconds_per_frame = animation_loop_seconds / frames_in_anim
    frame_delay = str(int(seconds_per_frame * 100))
    command_list = ['convert', '-delay', frame_delay, '-loop', '0'] + filename_list + ['anim.gif']
    # Use the "convert" command (part of ImageMagick) to build the animation
    subprocess.call(command_list, cwd=directory_now)
    # Earlier, we saved an image file for each frame of the animation. Now
    # that the animation is assembled, we can (optionally) delete those files
    if True:
        for filename in filename_list:
            os.remove(filename)
    return

main()

Napisi

Dodajte enovrstični opis, kaj ta datoteka predstavlja

Predmeti, prikazani v tej datoteki

motiv

6. marec 2014

Zgodovina datoteke

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

Datum in časSličicaVelikostUporabnikKomentar
trenutno03:59, 7. marec 2014Sličica za različico z datumom 03:59, 7. marec 2014300 × 90 (214 KB)Sbyrnes321User created page with UploadWizard

Datoteka je del naslednje 1 strani slovenske Wikipedije (strani drugih projektov niso navedene):

Globalna uporaba datoteke

To datoteko uporabljajo tudi naslednji vikiji: