Inclinedthrow.gif(400 × 288 пиксел, файл өлшемі: 374 КБ, MIME түрі: image/gif, тұйық, 102 кадр, 10с)

Бұл файл Wikimedia Commons? жобасынан, сондықтан басқа жобаларда да қолдануы мүмкін.

Commons ашық лицензиялы медиа файл қоры. Сіз жобаға көмектесе аласыз.

Ортаққордан қарау Ортаққордан қарау

Түйін

Сипаттамасы
English: Trajectories of three objects thrown at the same angle (70°). The black object doesn't experience any form of drag and moves along a parabola. The blue object experiences Stokes' drag, and the green object Newton drag.
Күні
Көзі Өзімнің туындым
Авторы AllenMcC.
Басқа нұсқалары Inclinedthrow2.gif
GIF genesis
InfoField
 
Бұл GIF Мәтіндік Matplotlib көмегімен жасалған.
Программа басылмасы
InfoField

Python code

#!/usr/bin/python3
# -*- coding: utf8 -*-

import os
import inspect
from math import *
import numpy as np
from scipy.integrate import odeint
from scipy.optimize import newton
import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib import animation

# settings
mpl.rcParams['path.snap'] = False
fname = 'inclinedthrow'
size = 400, 288
l, w, b, h = 22.5/size[0], 1-23/size[0], 22.5/size[1], 1-23/size[1]
nframes = 102
delay = 8
lw = 1.
ms = 6
c1, c2, c3 = "#000000", "#0000ff", "#007100"

def projectile_motion(g, mu, pot, xy0, vxy0, tt):
    # use a four-dimensional vector function vec = [x, y, vx, vy]
    def dif(vec, t):
        # time derivative of the whole vector vec
        v = hypot(vec[2], vec[3])
        vxrel, vyrel = vec[2] / v, vec[3] / v
        return [vec[2], vec[3], -mu * v**pot * vxrel, -g - mu * v**pot * vyrel]

    # solve the differential equation numerically
    vec = odeint(dif, [xy0[0], xy0[1], vxy0[0], vxy0[1]], tt)
    return vec[:, 0], vec[:, 1], vec[:, 2], vec[:, 3]  # return x, y, vx, vy

g = 1.
theta  = radians(70)
v0 = sqrt(g/sin(2*theta))
vinf = 2.1
# use identical terminal velocity vinf for both types of friction
mu_stokes = g / vinf**1
mu_newton = g / vinf**2
x0, y0 = 0.0, 0.0
vx0, vy0 = v0 * cos(theta), v0 * sin(theta)

T = newton(lambda t: projectile_motion(g, 0, 0, (x0, y0), (vx0, vy0), [0, t])[1][1], 2*vy0/g)
nsub = 10
tt = np.linspace(0, T * nframes / (nframes - 1), (nframes - 1) * nsub + 1)

traj_free = projectile_motion(g, 0, 0, (x0, y0), (vx0, vy0), tt)
traj_stokes = projectile_motion(g, mu_stokes, 1, (x0, y0), (vx0, vy0), tt)
traj_newton = projectile_motion(g, mu_newton, 2, (x0, y0), (vx0, vy0), tt)

def animate(nframe, saveframes=False):
    print(nframe, '/', nframes)
    t = T * float(nframe) / nframes
    
    plt.clf()
    fig.gca().set_position((l, b, w, h))
    fig.gca().set_aspect("equal")
    plt.xlim(0, 1)
    plt.ylim(0, (h*size[1]) / (w*size[0]))
    plt.xticks([]), plt.yticks([])
    plt.xlabel('Distance', size=12)
    plt.ylabel('Height', size=12)
    
    plt.plot(traj_free[0][:nframe*nsub+1], traj_free[1][:nframe*nsub+1],
        '-', lw=lw, color=c1)
    plt.plot(traj_free[0][nframe*nsub], traj_free[1][nframe*nsub],
        'ok', color=c1, markersize=ms, markeredgewidth=0)
    
    plt.plot(traj_stokes[0][:nframe*nsub+1], traj_stokes[1][:nframe*nsub+1],
        '-', lw=lw, color=c2)
    plt.plot(traj_stokes[0][nframe*nsub], traj_stokes[1][nframe*nsub],
        'ok', color=c2, markersize=ms, markeredgewidth=0)
    
    plt.plot(traj_newton[0][:nframe*nsub+1], traj_newton[1][:nframe*nsub+1],
        '-', lw=lw, color=c3)
    plt.plot(traj_newton[0][nframe*nsub], traj_newton[1][nframe*nsub],
        'ok', color=c3, markersize=ms, markeredgewidth=0)
    
    if saveframes:
        # export frame
        dig = int(ceil(log10(nframes)))
        fsavename = ('frame{:0' + str(dig) + '}.svg').format(nframe)
        fig.savefig(fsavename)
        with open(fsavename) as f: content = f.read()
        content = content.replace('pt"', 'px"').replace('pt"', 'px"')
        with open(fsavename, 'w') as f: f.write(content)

fig = plt.figure(figsize=(size[0]/72., size[1]/72.))

os.chdir(os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))))
for i in range(nframes):
    animate(i, True)
os.system('convert -loop 0 -delay ' + str(delay) + ' frame*.svg +dither ' + fname + '.gif')
# keep last frame for two seconds
os.system('gifsicle -k32 --color-method blend-diversity -b ' + fname + '.gif -d' + str(delay) + ' "#0-' + str(nframes-2) + '" -d200 "#' + str(nframes-1) + '"')
for i in os.listdir('.'):
    if i.startswith('frame') and i.endswith('.svg'):
        os.remove(i)

Лицензиялау

Мен бұл туындының авторымын, келесі лицензия аясында бұны жариялаймын:
w:en:Creative Commons
атрибуция бірдей шарттарда тарату
Бұл файл Creative Commons Attribution-Share Alike 3.0 Unported лицензиясы бойынша қолжетімді.
Сіз келесі әрекеттерге еркінсіз:
  • бөлісу – туындыны көшіру, тарату және тапсыру
  • мазмұнын өзгерту – туындыны бейімдеу
Келесі ережелерді сақтағанда:
  • атрибуция – Авторлықты белгілеп, лицензияға сілтеме беріп, өзгеріс жасалғанын анықтауыңыз керек. Сіз мұны кез келген орынды жолмен істей аласыз, бірақ лицензиар сізді немесе қолдануыңызды мақұлдайтындай емес.
  • бірдей шарттарда тарату – Материалды араластырсаңыз, түрлендірсеңіз немесе құрастырсаңыз, үлестеріңізді түпнұсқамен бірдей бірдей немесе үйлесімді лицензия бойынша таратуыңыз керек.

Captions

Add a one-line explanation of what this file represents

Items portrayed in this file

суреттелген нәрсе

copyright status ағылшын тілі

copyrighted ағылшын тілі

copyright license ағылшын тілі

inception ағылшын тілі

15 желтоқсан, 2008

source of file ағылшын тілі

original creation by uploader ағылшын тілі

Файл тарихы

Файл сол кезде қалай көрінгенін көру үшін күн/уақыт дегенге басыңыз.

Күн/УақытНобайӨлшемдерҚатысушыПікір
қазіргі22:10, 2020 ж. қазанның 2122:10, 2020 ж. қазанның 21 кезіндегі нұсқасының нобайы400 × 288 (374 КБ)Geek3adjusted friction coefficients such to make terminal velocity of both trajectories equal. In this case, the Newton projectile moves further.
18:57, 2009 ж. қазанның 2118:57, 2009 ж. қазанның 21 кезіндегі нұсқасының нобайы400 × 288 (453 КБ)AllenMcC.added Newton drag
06:40, 2008 ж. желтоқсанның 2206:40, 2008 ж. желтоқсанның 22 кезіндегі нұсқасының нобайы400 × 299 (393 КБ)AllenMcC.== Summary == {{Information |Description={{en|1=Trajectories of two objects thrown at the same angle. The blue object doesn't experience any drag and moves along a parabola. The black object experiences Stokes' drag.}} |Source=Own work by uploader |Author
02:12, 2008 ж. желтоқсанның 1902:12, 2008 ж. желтоқсанның 19 кезіндегі нұсқасының нобайы400 × 299 (393 КБ)AllenMcC.== Summary == {{Information |Description={{en|1=Trajectories of two objects thrown at the same angle. The blue object doesn't experience any drag and moves along a parabola. The black object experiences Stokes' drag.}} |Source=Own work by uploader |Author
10:07, 2008 ж. желтоқсанның 1510:07, 2008 ж. желтоқсанның 15 кезіндегі нұсқасының нобайы700 × 519 (636 КБ)AllenMcC.{{Information |Description={{en|1=Trajectories of two objects thrown at the same angle. The blue object doesn't experience friction and moves along a parabola. The black object experiences Stokes friction.}} |Source=Own work by uploader |Author=[[User:All

Бұл файлды мына 2 бет қолданады:

Глобалды файл қолданылуы

Бұл файл келесі басқа уикилерде қолданылады:

Бұл файлдың глобалды қолданылуын көбірек көру.