For faster navigation, this Iframe is preloading the Wikiwand page for Slika:SquareWaveFourierArrows.gif.

Slika:SquareWaveFourierArrows.gif

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

Uporaba datoteke

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

Globalna uporaba datoteke

To datoteko uporabljajo tudi naslednji vikiji:

{{bottomLinkPreText}} {{bottomLinkText}}
Slika:SquareWaveFourierArrows.gif
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.

X

Get ready for Wikiwand 2.0 🎉! the new version arrives on September 1st! Don't want to wait?